面試題 機械人的運動範圍

2021-08-15 02:00:53 字數 1017 閱讀 5121

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

思路:跟之前《矩陣中的路徑》那題相似的背景。抽象化x,y軸,可以拿一維或者二維陣列表示,一維陣列的話就要傳入行列數。因為要試探下一步能不能走,即符不符合條件。套路也有了,乙個方法作為入口方法,乙個方法作為核心方法,乙個方法作為條件方法。

入口方法:

static int movingcount(int threshold, int rows, int cols)

bool visited = new bool[rows * cols];

for (int i = 0; i < rows*cols; i++)

int count = movingcountcore(threshold, rows, cols,

0, 0, visited);

return count;

}輸入引數有閾值k,行列數則代表矩形大小,理論上矩陣的行或列數字之和不應小於閾值k。入口方法開局應對輸入引數做有效性判斷,提高**的魯棒性。然後矩陣對應乙個bool陣列,開局全為false。然後開始核心方法,從(0,0)點開始計算。

static int movingcountcore(int threshold, int rows, int cols, int row, int col, bool visited)

return count;

}核心方法是回溯的核心,感覺很有棧的思想。

static bool check(int threshold, int rows, int cols, int row, int col, bool visited)

return sum;

}最後就是兩個邏輯判斷方法。

心得:入口方法、回溯核心方法,依據判斷方法,這三個方法的套路似乎對這種題型很有用!

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

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

面試題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 的格仔開始移動,它每次可以向左 右 上 下移動一格,但不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入方格 35,38 因為3 5 3 8 19,請問該機械人能...