13.機器人的運動範圍
面試題13. 機器人的運動範圍
難度中等96
地上有一個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
示例 2:
輸入:m = 3, n = 1, k = 0 輸出:1
回溯
用visited記錄當前是否訪問過,終止條件 i j條件
int m = 0;//行
int n = 0;//列
int k = 0;//閾值
boolean [][] visited;//記錄是否訪問過
public int movingCount(int m, int n, int k) {
this.m = m;
this.n = n;
this.k = k;
visited = new boolean [m][n];
return count(0,0);
}
private int count(int i,int j){
if(i<0||j<0|| i>=m || j >= n|| visited[i][j] || i/10+i%10+j/10+j%10>k){
return 0;
}
visited[i][j] = true;
return 1+count(i+1,j) + count(i-1,j)+count(i,j+1)+count(i,j-1);
}