解题思路:
1.先先找到R所在的位置,即获取R所在行列坐标
2.根据R所在行向左查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
3.根据R所在行向右查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
4.根据R所在行向上查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
5.根据R所在行向左查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
代码实现:
class Solution {
public int numRookCaptures(char[][] board) {
int rows=8;
int cols=8;
int row=0;//记录R所在的行
int col=0;//记录R所在的列
//1.先找到R所在的位置
for(int i=0;i<rows;++i){
for(int j=0;j<cols;++j){
if(board[i][j]=='R'){
row=i;
col=j;
break;
}
}
}
int cnt=0;
//2.根据R所在行向左查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
for(int j=col-1;j>=0;--j){//R所在的行的左边
if(board[row][j]=='B'){
break;
}
if(board[row][j]=='p'){
cnt++;
break;
}
}
//3.根据R所在行向右查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
for(int j=col+1;j<cols;++j){//R所在的行的右边
if(board[row][j]=='B'){
break;
}
if(board[row][j]=='p'){
cnt++;
break;
}
}
//4.根据R所在行向上查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
for(int i=row-1;i>=0;--i){//R所在列的上边
if(board[i][col]=='B'){
break;
}
if(board[i][col]=='p'){
cnt++;
break;
}
}
//5.根据R所在行向左查找p,如果遇到B,则结束。如果查找到p则计数器加1,并结束
for(int i=row+1;i<rows;++i){//R所在列的下边
if(board[i][col]=='B'){
break;
}
if(board[i][col]=='p'){
cnt++;
break;
}
}
return cnt;
}
}