leetcode 999. 车的可用捕获量

在这里插入图片描述

在这里插入图片描述

本来以为要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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值