题目描述:
在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “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
解题思路:
根据题目意思,白色的车分别沿着上下左右四个方向,当遇到白色的卒或者到达边界位置时停下来,否则遇到黑色的卒数量加一,然后停止往下走。
代码:
class Solution(object):
def numRookCaptures(self, board):
m = len(board)
n = len(board[0])
R_line ,R_column = 0, 0
number = 0
for i in range(m):
for j in range(n):
if board[i][j] == "R":
R_line = i
R_column = j
break
for i in range(R_line-1,0,-1): # 向上
if board[i][R_column] != "B":
if board[i][R_column] == "p":
number += 1
break
else:
break
for i in range(R_line+1, m): # 向下
if board[i][R_column] != "B" :
if board[i][R_column] == "p":
number += 1
break
else:
break
for j in range(R_column-1, 0, -1): # 向左
if board[R_line][j] != "B" :
if board[R_line][j] == "p":
number += 1
break
else:
break
for j in range(R_column+1, n, 1): # 向右
if board[R_line][j] != "B":
if board[R_line][j] == "p":
number += 1
break
else:
break
return number
s = Solution()
board = [[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","R",".",".",".","p"],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]]
print(s.numRookCaptures(board))
题目来源:
999. 车的可用捕获量