劍指offer 66 機械人的運動範圍

2021-09-24 22:58:09 字數 1198 閱讀 9014

1.題目描述

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。 例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機械人能夠達到多少個格仔?

2.解題思路
本題使用的方法同樣還是回溯法,另外還需要會計算給定整數上的各個位上數之和。

(1)使用乙個訪問陣列記錄是否已經經過該格仔。機械人從(0,0)開始移動,當它準備進入(i,j)的格仔時,通過檢查座標的數字來判斷機械人是否能夠進入。

(2)如果機械人能進入(i,j)的格仔,接著在判斷它是否能進入四個相鄰的格仔(i,j-1),(i,j+1),(i-1,j),(i+1,j)。

因此,可以用回溯法來解決這一問題。

3.**
public

class

solution

boolean

visit=

newboolean

[rows*cols]

;return

count

(threshold,rows,cols,visit,0,

0);}

private

static

intcount

(int threshold,

int rows,

int cols,

boolean

visit,

int row,

int col)

return res;

}private

static

boolean

check

(int threshold,

int rows,

int cols,

boolean

visit,

int row,

int col)

return

false;}

//獲取位數之和

private

static

intgetnum

(int num)

return sum;

}}

劍指offer 66 機械人的運動範圍

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...

劍指Offer(66) 機械人的運動範圍

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...

劍指offer 66 機械人的運動範圍

題目描述 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8...