难度中等204收藏分享切换为英文接收动态反馈
地上有一个m行n列的方格,从坐标 [0,0]
到坐标 [m-1,n-1]
。一个机器人从坐标 [0, 0]
的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?
BFS
即使用一个队列,当队列不为空时,取出队头访问,并将队头连接的未访问点加入队尾
依次迭代
class Solution:
def movingCount(self, m: int, n: int, k: int) -> int:
queue = [(0, 0)]
visited = set()
while(queue):
node = queue.pop(0)
if 0<=node[0]<m and 0<=node[1]<n and node[0]//10+node[0]%10+node[1]//10+node[1]%10<=k and node not in visited:
visited.add(node)
i, j = node[0], node[1]
queue.append((i+1, j))
queue.append((i-1, j))
queue.append((i, j-1))
queue.append((i, j+1))
return len(visited)
使用列表构建队列
list的pop(索引) 方法,弹出索引位置的元素并返回,默认弹出最后一个,所以pop(0)相当于从队头取
list.append()加入最后,相当于队尾的插入
set()
set()为一个不重复表,故在进行图的遍历操作时,可作为visited记录遍历过的点