privatestaticintadd(int x, int y){ int sum = 0; while (x != 0) { sum += x % 10; x /= 10; } while (y != 0) { sum += y % 10; y /= 10; } return sum; }
publicintmovingCount(int m, int n, int k){ if (m == 0 || n == 0) return0; Node node = new Node(0, 0); int count = 0; boolean[][] visited = newboolean[m][n]; Queue<Node> queue = new ArrayDeque<>(m * n); queue.add(node); visited[0][0] = true; while (!queue.isEmpty()) { node = queue.poll(); count++; int x = node.x; int y = node.y; for (int i = 0; i < 2; i++) { int[] direction = directions[i]; int x2 = x + direction[0]; int y2 = y + direction[1]; if (x2 < 0 || y2 < 0 || x2 >= m || y2 >= n || visited[x2][y2] || add(x2, y2) > k) { continue; } queue.add(new Node(x2, y2)); visited[x2][y2] = true; } } return count; } }