999. 可以被一步捕获的棋子数 - 力扣(LeetCode)
我们可以按照以下步骤解决这个问题:
-
找到白色车的初始位置 (
'R'
)。 -
模拟车的四个方向(上、下、左、右)移动:
-
如果遇到
'B'
,则路径被阻挡,不能继续。 -
如果遇到
'p'
,可以吃掉该棋子,但不能继续。
-
-
统计车能够攻击到的
'p'
的数量。
代码实现:
def numRookCaptures(board):
# 找到车的位置
for i in range(8):
for j in range(8):
if board[i][j] == 'R':
x, y = i, j
count = 0
# 方向数组:上、下、左、右
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# 遍历四个方向
for dx, dy in directions:
nx, ny = x + dx, y + dy
while 0 <= nx < 8 and 0 <= ny < 8:
if board[nx][ny] == 'B': # 遇到象,停止
break
if board[nx][ny] == 'p': # 遇到兵,可以吃掉,计数+1
count += 1
break
nx += dx
ny += dy # 继续朝该方向搜索
return count
复杂度分析:
-
遍历棋盘找
R
:O(64)=O(1)(常数时间) -
四个方向遍历:最坏情况最多遍历 8 次,仍然是 O(1)
-
总复杂度:O(1)
这个算法能够有效地计算白车可以吃掉的黑色卒的数量。