Leetcode 999 Available Captures for Rook

在一个8x8的棋盘上,某个位置存在一个白方的车。棋盘上还有很多空位置,白方的主教,黑方的小兵。这四种位置分别用'R','.','B','p'代替。

车的移动方式是只能直线运动,可以朝上下左右四个方向移动(等价于中国象棋中的车)
问棋盘上的车能吃到多少个小兵(只走一步)。


白方车可以捕捉到3个黑方士兵

白方车可以捕捉到0个黑方士兵

提示:

  1. board.length == board[i].length == 8
  2. board[i][j] is either ‘R’, ‘.’, ‘B’, or ‘p’
  3. There is exactly one cell with board[i][j] == ‘R’

题意分析:
在一个8x8的方格中观察车能吃到多少个兵,那么我们只需要找出车所在的位置
然后分别向四个方向进行遍历寻找,一旦出界或者碰到障碍物(己方主教或地方小兵)就停止

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution(object):
def numRookCaptures(self, board):
# 找到rook位置
rook = [-1,-1]
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 'R':
rook = [i,j]
# 四个方向依次分析
res = 0
for directions in [[0,-1], [-1,0], [0,1], [1,0]]:
x, y = directions
i,j = rook
while 0<=i<8 and 0<=j<8 and board[i][j] in 'R.':
i += x; j += y
# 如果是碰到障碍物,判断障碍物是否为地方小兵
if 0<=i<8 and 0<=j<8 and board[i][j] == 'p':
res += 1
return res