【力扣日記】面試題 13 機器人的運動範圍 |BFS

題目描述

地上有一個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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章