给定一个 8 x 8
的棋盘,只有一个 白色的车,用字符 '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 == 8
board[i].length == 8
board[i][j]
可以是'R'
,'.'
,'B'
或'p'
- 只有一个格子上存在
board[i][j] == 'R'
我的解答
class Solution {
public int numRookCaptures(char[][] board) {
int res = 0;
for(int y = 0; y < 8; y++){
for(int x = 0; x < 8; x++){
// 找到车的位置
if(board[y][x] == 'R'){
// 遍历车左边的格子
for(int l_x = x - 1; l_x >= 0; l_x-- )
{
if(board[y][l_x] != '.'){
res += board[y][l_x] == 'p' ? 1 : 0;
break;
}
}
// 遍历车右边的格子
for(int r_x = x + 1; r_x < 8; r_x++ ){
if(board[y][r_x] != '.'){
res += board[y][r_x] == 'p' ? 1 : 0;
break;
}
}
// 遍历车上方的格子
for(int o_y = y - 1;o_y >= 0; o_y-- ){
if(board[o_y][x] != '.'){
res += board[o_y][x] == 'p' ? 1 : 0;
break;
}
}
// 遍历车下方的格子
for(int d_y = y + 1;d_y < 8; d_y++ ){
if(board[d_y][x] != '.'){
res += board[d_y][x] == 'p' ? 1 : 0;
break;
}
}
}
}
}
return res;
}
}