本来以为要BFS,读完题后发现不用那么复杂
直接无脑四个循环
class Solution:
def numRookCaptures(self, board: List[List[str]]) -> int:
ans=0
for i in range(8):
for j in range(8):
# 计算四个方向的棋子的距离,如果先碰到象则跳过
if board[i][j]=='R':
# 往左走
for tj in range(j-1,-1,-1):
if board[i][tj]=='B':
break
if board[i][tj]=='p':
ans+=1
break
for ti in range(i-1,-1,-1):
if board[ti][j]=='B':
break
if board[ti][j]=='p':
ans+=1
break
for tj in range(j+1,8):
if board[i][tj]=='B':
break
if board[i][tj]=='p':
ans+=1
break
for ti in range(i+1,8):
if board[ti][j]=='B':
break
if board[ti][j]=='p':
ans+=1
break
return ans
优化下
class Solution:
def numRookCaptures(self, board: List[List[str]]) -> int:
ans=0
d=[[0,-1],[-1,0],[0,1],[1,0]]
for i in range(8):
for j in range(8):
# 计算四个方向的棋子的距离,如果先碰到象则跳过
if board[i][j]=='R':
for t in range(4):
td=d[t]
x,y=i,j
while True:
x+=td[0]
y+=td[1]
if x<0 or y<0 or x>=8 or y>=8 or board[x][y]=='B':
break
if board[x][y]=='p':
ans+=1
break
return ans