地上有乙個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
/**
* @param m
* @param n
* @param k
* @return
*/var movingcount =
function
(m, n, k)
//判斷是否走過當前格仔以及數字之和是否大於k
if(flagarr[i]
[j]||
!judge
(i, j, k)
)//做出選擇
flagarr[i]
[j]=
true
;//進入下一步搜尋
return1+
movingcountcore
(m, n, k, i+
1, j, flagarr)
+movingcountcore
(m, n, k, i, j+
1, flagarr);}
//判斷當前下標數字之和是否大於k
function judge
(i, j, k)
return sum <= k;
}//建立二維陣列,標記是否走過該格仔
//true-走過;false-沒走過
function createarray
(rows, cols)
}return result;}}
;
時間複雜度:o(mn);
空間複雜度:o(mn);
收穫:js建立二維陣列;
參考:
劍指offer13機械人的運動範圍
地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入...
劍指Offer系列13 機械人的運動範圍
地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入...
劍指 Offer 13 機械人的運動範圍
題目描述 地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但...