题目
关键点
① 数位之和的特征
很好理解,当进位时,十位加一,个位减9,当不进位时,只是个位加1。
(x+1) % 10 != 0 ? s_x + 1 : s_x - 8;
class Solution {
int kk;
int mm;
int nn;
boolean[][] visited;
public int movingCount(int m, int n, int k) {
kk = k;
mm = m;
nn = n;
visited = new boolean[m][n];
return dfs(0, 0, 0, 0);
}
public int dfs(int x,int y, int xi, int yi) {
if ((xi + yi) > kk || x < 0 || y < 0 || x >= mm || y >= nn || visited[x][y]) {
return 0;
}
visited[x][y] = true;
int res = dfs(x+1, y, ((x + 1) % 10) != 0 ? xi +1 : xi - 8, yi) +
dfs(x, y+1, xi, (y + 1) % 10 != 0 ? yi + 1: yi -8 ) + 1;
// 这里不需要再设置为false,因为只运动一次,而如果是像
// 矩阵中的路径 那题需要多次循环时,则需要将这个再次设为false。
//visited[x][y] = false;
return res;
}
}