剑指offer13-机器人的运动范围

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        def count(num) -> int:
            result = 0
            while num:
                result += num % 10
                num = int(num / 10)
            return result

        # 访问标记
        visited = []
        for i in range(m):
            visited.append([0] * n)

        self.result = 0

        def dfs(i, j) -> int:
            if not (0 <= i < m) or not (0 <= j < n) or not ((count(i) + count(j)) <= k) or visited[i][j] == 1:
                return 0
            else:
                # 首先压栈做访问标记,result加一
                # 之后对四个方位进行访问,然后逐个出栈
                # 因为最后的目的是求所有能访问到的格子,所以做简单的访问标记就可以,得益于正方形的结构
                # 这种递归结构把所有的方格都走了一个遍
                visited[i][j] = 1
                self.result += 1
                dfs(i + 1, j)
                dfs(i - 1, j)
                dfs(i, j + 1)
                dfs(i, j - 1)
            return self.result

        return dfs(0, 0)


solu = Solution()
x = solu.movingCount(2, 3, 17)
print(x)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值