剑指offer系列-面试题-13 - 机器人的运动范围(python)

mac2026-08-25  10

文章目录

1. 题目2. 解题思路3. 代码实现3.1 BFS 4. 总结5. 参考文献

1. 题目

地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之后大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方法(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?

2. 解题思路

详情见 机器人的运动范围

3. 代码实现

3.1 BFS

def digitsum(n): ans = 0 while n: ans += n % 10 n //= 10 return ans class Solution: def movingCount(self, m: int, n: int, k: int) -> int: from queue import Queue q = Queue() q.put((0, 0)) s = set() while not q.empty(): x, y = q.get() if (x, y) not in s and 0 <= x < m and 0 <= y < n and digitsum(x) + digitsum(y) <= k: s.add((x, y)) for nx, ny in [(x + 1, y), (x, y + 1)]: q.put((nx, ny)) return len(s)

4. 总结

so hard

5. 参考文献

[1] 剑指offer丛书 [2] 剑指Offer——名企面试官精讲典型编程题

最新回复(0)