链接
https://leetcode-cn.com/problems/available-captures-for-rook/
耗时
解题:17 min
题解:10 min
题意
在一个 8 x 8 的棋盘上,有白色车(R),白色的象(B)、黑色的卒(p)和空白格(.),问白色车通过一次移动可以吃掉的黑色卒有多少个?车能选择 上下左右 任一方向走任意格。并且只有一个格子上存在 board[i][j] == ‘R’。
思路
简单模拟,我的思路是先找到 ‘R’ 的位置(因为只有一个 R)。然后从 ‘R’ 的位置出发向四个方向径直寻找,若到达边界或到达 ‘B’ 说明此路不通换下一方向,若到达 ‘p’ 结果加 1 然后换下一方向。
AC代码
class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
int n = board.size(), Rx, Ry;
// find R
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
if(board[i][j] == 'R') {
Rx = i;
Ry = j;
break;
}
}
}
// get pawns
int ans = 0;
int dir[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
for(int d = 0; d < 4; ++d) {
int x = Rx + dir[d][0];
int y = Ry + dir[d][1];
while((x >= 0 && x < n) && (y >= 0 && y < n)) {
if(board[x][y] == 'B') break;
if(board[x][y] == 'p') {
ans++;
break;
}
x += dir[d][0];
y += dir[d][1];
}
}
return ans;
}
};