20241206: 999. 可以被一步捕获的棋子数

给定一个 8 x 8 的棋盘,只有一个 白色的车,用字符 'R' 表示。棋盘上还可能存在白色的象 'B' 以及黑色的卒 'p'。空方块用字符 '.' 表示。

车可以按水平或竖直方向(上,下,左,右)移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移动到棋子的方格,则能够 吃掉 棋子。

注意:车不能穿过其它棋子,比如象和卒。这意味着如果有其它棋子挡住了路径,车就不能够吃掉棋子。

返回白车 攻击 范围内 兵的数量。

 

复制代码
class Solution:
    def numRookCaptures(self, board: List[List[str]]) -> int:
        SIZE = 8
        for i, row in enumerate(board):
            for j, c in enumerate(row):
                if c == 'R':
                    x0, y0 = i, j
        ans = 0
        for dx, dy in (0, -1), (0, 1), (-1, 0), (1, 0):
            x, y = x0 + dx, y0 + dy
            while 0 <= x < SIZE and 0 <= y < SIZE and board[x][y] == '.':
                x += dx
                y += dy
            if 0 <= x < SIZE and 0 <= y < SIZE and board[x][y] == 'p':
                ans += 1
        return ans
复制代码

 

posted @   xiaoxinlong  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
AmazingCounters.com
点击右上角即可分享
微信分享提示