面試題13 機器人的運動範圍

地上有一個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:

輸入:m = 2, n = 3, k = 1
輸出:3
示例 2:

輸入:m = 3, n = 1, k = 0
輸出:1

用最笨的遍歷的方法做了半個小時也沒做出來,先把我的弱智垃圾還有錯的代碼貼在這,明天更新

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        # 方法1 全部遍歷
        num = 0
        col_flag = 0
        for i in range(m):
            i_bitSum = int(i/10)+(i%10)
            print(i_bitSum)
            if k >= i_bitSum: # 行的位和不大於k
                for j in range(n):
                    j_bitSum = int(j/10)+(j%10)
                    print(j_bitSum)
                    if k >= (i_bitSum + j_bitSum):
                        num = num + 1 
                    else:   # 出現某一行的某一列中斷,則後面的列也必然不連通,直接break,執行下一行
                        if i == 0:
                            col_flag = j
                        elif j >= col_flag:  # 第一行的列決定了最遠的位置
                            break
            else:   # 若只是行的位和都比k大,則直接下一次循環即可
                break   # 出現一行一個都沒有,則 這個圖不連通,即後面的都是錯誤的。直接break返回
        return num

 

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