又是忙碌的一天过去了(太虚伪了,好像并不忙),回来先把衣服洗一洗。
然后做一下题目吧,接着昨天的开始做,今天要做第13题了。
首先是,题目描述:
然后是解法(还是DFS):
public class Design {
public static int movingCount(int m, int n, int k) {
boolean[][] visited = new boolean[m][n];
return deepMoveFirst(m, n, 0, 0, k, visited);
}
private static int deepMoveFirst(int m, int n, int x, int y, int k, boolean[][] visited) {
visited[x][y] = true;
if (m == 0 || n == 0 || k == 0) {
return 0;
}
int count = 1;
// 向上
if (x > 0 && !visited[x - 1][y] && canMove(x - 1, y, k)) {
count += deepMoveFirst(m, n, x - 1, y, k, visited);
}
// 向下
if (x < m - 1 && !visited[x + 1][y] && canMove(x + 1, y, k)) {
count += deepMoveFirst(m, n, x + 1, y, k, visited);
}
// 向左
if (y > 0 && !visited[x][y - 1] && canMove(x, y - 1, k)) {
count += deepMoveFirst(m, n, x, y - 1, k, visited);
}
// 向右
if (y < n - 1 && !visited[x][y + 1] && canMove(x, y + 1, k)) {
count += deepMoveFirst(m, n, x, y + 1, k, visited);
}
return count;
}
private static boolean canMove(int x, int y, int k) {
String xStr = x + "";
String yStr = y + "";
int sum = 0;
int len = xStr.length();
int iter = 0;
while (iter < len) {
sum += xStr.charAt(iter++) - '0';
}
len = yStr.length();
iter = 0;
while (iter < len) {
sum += yStr.charAt(iter++) - '0';
}
return sum <= k;
}
public static void main(String[] args) {
System.out.println(movingCount(3, 3, 2));
}
}