int[] dx = new int[] {0, -1 , 0, 1};
int[] dy = new int[] {-1, 0, 1, 0};
public int movingCount(int m, int n, int k) {
boolean[][] flag = new boolean[m][n];
return dfs(0, 0, m, n, k, flag);
}
public int dfs (int x, int y, int m, int n, int k, boolean[][] flag) {
int num = 0;
if ((sum(x) + sum(y)) > k) return num;
num ++;
flag[x][y] = true;
for (int i = 0; i < 4; i++) {
int x1 = x + dx[i], y1 = y + dy[i];
if (x1 >= 0 && x1 < m && y1 >= 0 && y1 < n && flag[x1][y1] != true) {
num += dfs(x1, y1, m, n, k, flag);
}
}
//flag[x][y] = false;
return num;
}
public int sum (int x) {
int sum = 0;
while (x != 0) {
sum += x % 10;
x /= 10;
}
return sum;
}
07-20
07-20
07-20
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交