題目描述
地上有乙個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
解題思路
1、題意理解,假設這個m行n列的方格為m x n 的矩陣,在這個矩陣中,機械人從座標(0,0)開始移動,通過檢查座標的數字之和是否大於k,來判斷它是否可以進入這個格仔(i,j),如果機械人可以進入這個格仔(i, j),再判斷它能否進入4個相鄰的格仔(i - 1, j) (i + 1, j) (i, j - 1) (i, j + 1),其中機械人不能重複進入同乙個格仔。
2、判斷行座標和列座標的數字之和大於k
int getdigitsum (
int number)
return sum;
}
3、建立乙個變數boolean visited = new boolean[m][n];
來記錄已經訪問過的格仔,如果該格仔可以訪問visited[i][j] = true;
**
class
solution
private
intdfs
(int i,
int j ,
int m,
int n,
int k ,
boolean visited[
])intgetdigitsum
(int number)
return sum;
}}
劍指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。但它不能進入...