python-leetcode-999. 可以被一步捕获的棋子数

999. 可以被一步捕获的棋子数 - 力扣(LeetCode)

我们可以按照以下步骤解决这个问题:

  1. 找到白色车的初始位置 ('R')

  2. 模拟车的四个方向(上、下、左、右)移动

    • 如果遇到 'B',则路径被阻挡,不能继续。

    • 如果遇到 'p',可以吃掉该棋子,但不能继续。

  3. 统计车能够攻击到的 '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)

这个算法能够有效地计算白车可以吃掉的黑色卒的数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值