題目描述
地上有一個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。請問該機器人能夠到達多少個格子?
1 <= n,m <= 100
0 <= k <= 20
算法思路
依然是廣度優先搜索。
起始點是(0,0)
,從這裏開始上下左右遍歷,滿足條件的放入待遍歷列表,直到待遍歷列表爲空時結束循環。
class Solution(object):
def movingCount(self, m, n, key):
# def helper(a,b,k):
# return sum(list(map(int,str(a)+str(b))))<=k
tp=[[None for i in range(n)]for j in range(m)]
tp[0][0]=1
ls=[(0,0)]
diretion=[(0,1),(-1,0),(1,0),(0,-1)]
res=1
while ls:
for _ in range(len(ls)):
x,y=ls.pop(0)
for k in diretion:
x_n,y_n=x+k[0],y+k[1]
if 0<=x_n<m and 0<=y_n<n and tp[x_n][y_n]==None:
if sum(list(map(int,str(x_n)+str(y_n))))<=key:
tp[x_n][y_n]=1
res+=1
ls.append((x_n,y_n))
else:
tp[x_n][y_n]=0
return res
執行用時 :48 ms, 在所有 Python 提交中擊敗了67.61%的用戶
內存消耗 :12.9 MB, 在所有 Python 提交中擊敗了100.00%的用戶