地上有乙個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示例 2:輸出:3
輸入:m = 3, n = 1, k = 0輸出:1
1 <= n,m <= 100
0 <= k <= 20
深度優先遍歷(dfs)
,通過判斷該座標是否越界、該座標是否訪問過、該座標數字之和是否大於k
來判斷機械人能否進入該格仔,不管能否進入,都將該格仔標記為已訪問,且退出當前呼叫棧後,不用回退標記陣列的狀態,因為本身就是要訪問完所有能夠訪問到的格仔。如果機械人能夠進入座標為(x,y)
的格仔,而後再判斷機械人能否進入該座標相鄰的4
個格仔,直到所有能遍歷到的格仔都遍歷結束。
注意:有些格仔機械人是遍歷不到的,如k=0
時, 不管m,n
多大,機械人只能訪問到(0,0),(0,1),(1,0)
三個座標,且只能到達(0,0)
乙個座標,無法通過訪問到的(0,1)
和(1,0)
擴散出去訪問別的座標,因為這兩個座標機械人無法到達,只是可以通過(0,0)
訪問到他們一次而已,即這裡要區分訪問
和到達
是不同的含義。
如下圖中3×2
的方格,機械人從(0,0)
開始移動,由於k=0
,故訪問了(0,1)
後,數字之和大於0
,回溯到上一級棧(0,0)
處,繼續換個方向移動,訪問(1,0
)後發現同樣數字之和大於0
,又回溯到(0,0)
處,此時發現沒有方向可以移動了,整個dfs
結束。另外的三個座標(1,1)、(2,0)(2,1)
根本就沒有訪問
過。
但若讓k=2
,則按照上述思路思考,機械人可以訪問到所有格仔,只是(2,1)
無法到達而已,但可以通過(1,1
)或者(2,0)
訪問到,只是由於(2,1)
數字之和為3
大於2
,機械人無法到達
。
}//計算行座標和列座標的數字之和
}//計算行座標和列座標的數字之和
13 機械人運動範圍
地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...
13 機械人的運動範圍
有乙個m行n列的方格,乙個機械人從座標 0 0 的格仔開始移動,它每次可以向上下左右移動一格,但不能進入座標位數和大於threshold的格仔,求機械人一共能到達多少個格仔 機械人從 0,0 開始移動,當要移動到 i,j 時,先判斷i,j是否滿足條件,如果滿足,就進入,遞迴執行。如果不滿足,嘗試其他...
13機械人的運動範圍
地上有乙個 m 行和 n 列的方格。乙個機械人從座標 0,0 的格仔開始移動,每一次只能向左右上下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於 k 的格仔。例如,當 k 為 18 時,機械人能夠進入方格 35,37 因為 3 5 3 7 18。但是,它不能進入方格 35,38 因為 3...