• 999. 车的可用捕获量


    在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。

    车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。

    返回车能够在一次移动中捕获到的卒的数量。

    示例 1:

     

    输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
    输出:3
    解释:
    在本例中,车能够捕获所有的卒。
    示例 2:

     

    输入:[[".",".",".",".",".",".",".","."],[".","p","p","p","p","p",".","."],[".","p","p","B","p","p",".","."],[".","p","B","R","B","p",".","."],[".","p","p","B","p","p",".","."],[".","p","p","p","p","p",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
    输出:0
    解释:
    象阻止了车捕获任何卒。
    示例 3:

     

    输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]]
    输出:3
    解释:
    车可以捕获位置 b5,d6 和 f5 的卒。
     

    提示:

    board.length == board[i].length == 8
    board[i][j] 可以是 'R','.','B' 或 'p'
    只有一个格子上存在 board[i][j] == 'R'

    思路:这还要啥思路,水题无疑。

     1 class Solution {
     2 public:
     3     int numRookCaptures(vector<vector<char>>& board) {
     4         int col= board.size();
     5         int row = board[0].size();
     6         int count = 0;
     7         for(int i = 0;i<col;i++)
     8         {
     9             for(int j = 0;j<row;j++)
    10             {
    11                 if(board[i][j] == 'R')
    12                 {
    13 
    14                     for(int m = j+1;m < row;m++)
    15                     {
    16                         //north
    17                         char c = board[i][m];
    18                         if(c== 'p')
    19                         {
    20                           cout<<"north:"<<i<<","<<m<<endl;
    21                             count++;
    22                             break;
    23                         }
    24                         else if(c == 'B')
    25                         {
    26                             break;
    27                         }
    28                     }
    29                     for(int m = i+1;m<row;m++)
    30                     {
    31                         //east
    32                         char c = board[m][j];
    33                         if(c== 'p')
    34                         {
    35                             cout<<"east:"<<m<<","<<j<<endl;
    36                             count++;
    37                             break;
    38                         }
    39                         else if(c == 'B')
    40                         {
    41                             break;
    42                         }
    43                     }
    44                   for(int m = i-1;m>=0;m--)
    45                   {
    46                      //west
    47                      char c = board[m][j];
    48                      if(c== 'p')
    49                      {
    50                        cout<<"west:"<<m<<","<<j<<endl;
    51                          count++;
    52                          break;
    53                      }
    54                      else if(c == 'B')
    55                      {
    56                          break;
    57                      }
    58                   }
    59                   for(int m = j-1;m>=0;m--)
    60                   {
    61                      //south
    62                      char c = board[i][m];
    63                      if(c== 'p')
    64                      {
    65                         cout<<"south:"<<i<<","<<m<<endl;
    66                          count++;
    67                          break;
    68                      }
    69                      else if(c == 'B')
    70                      {
    71                         break;
    72                      }
    73                   } 
    74                   break;
    75                 }
    76             }
    77         }
    78       return count;
    79     }
    80 };
  • 相关阅读:
    如何用C++操作无线网卡开启共享热点WiFi?
    delphi中的copy函数和pos函数
    C#使用WinAPI 修改电源设置,临时禁止笔记本合上盖子时睡眠(使用PowerGetActiveScheme等函数,以及C#对WINAPI的调用)
    发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)
    认识TDD
    基于Bootstrap的Asp.net Mvc 分页
    Chrome控制台 JS调试
    英语学习
    JavaScript中的作用域和声明提前
    LeetCode: Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/Swetchine/p/11261413.html
Copyright © 2020-2023  润新知