地上有乙個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,請問該機械人能...