文章目录
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——名企面试官精讲典型编程题