class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
}
};
999. 可以被一步捕获的棋子数
在一个 8 x 8 的棋盘上,有一个白色的车(Rook
),用字符 'R'
表示。棋盘上还可能存在空方块,白色的象(Bishop
)以及黑色的卒(pawn
),分别用字符 '.'
,'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'
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2021-06-12 00:18:07
func numRookCaptures(board [][]byte) (cnt int) { ri, rj := 0, 0 for i := 0; i < 8; i++ { for j := 0; j < 8; j++ { if board[i][j] == 'R' { ri, rj = i, j break } } } tx, ty := 0, 0 // x轴,y轴 dx, dy := [4]int{0, 1, 0, -1}, [4]int{1, 0, -1, 0} for i := 0; i < 4; i++ { for step := 0; ; step++ { tx = ri + step * dx[i]; ty = rj + step * dy[i]; if tx < 0 || tx >= 8 || ty < 0 || ty >= 8 || board[tx][ty] == 'B' { break } if board[tx][ty] == 'p' { cnt++ break } } } return cnt }