这道题只需要模拟题意即可。分方向讨论时也有一些基本的编程经验,如dx, dy方向数组分开设置比较方便。
class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
if(board.size() != board[0].size()) return 0;
const int n = board.size();
int x, y;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(board[i][j] == 'R') { //漏写括号,break位置不对引起的bug
//break;
x = i;
y = j;
break;
}
}
}
//int dir[4][2] = {{1, 0},{-1, 0},{0, 1},{0, -1}};
int cnt = 0;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
for(int i = 0; i < 4; i++) { //4个方向探索
int tx = x, ty = y;
while(tx<n && tx>=0 && ty<n && ty>=0 && board[tx][ty]!='B') {
if(board[tx][ty] == 'p') {
cnt ++;
break;
}
tx += dx[i];
ty += dy[i];
}
}
return cnt;
}
};