题解 | #数组中重复的数字#
机器人的运动范围
http://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
public class Solution {
// 仅需new一个访问数组
public int movingCount(int threshold, int rows, int cols) {
boolean[][] visited = new boolean[rows][cols];
return dfs(threshold, 0, 0, visited);
}
// 深度优先搜索
private static int dfs(int threshold, int x, int y, boolean[][] visited) {
int m = visited.length, n = visited[0].length;
// 如果越界、访问过、大于阈值,直接返回0个。
if (x < 0 || x >= m || y < 0 || y >= n || visited[x][y] || sum(x, y) > threshold) {
return 0;
}
visited[x][y] = true;
// 四个方向,加上本身1个
return 1 + dfs(threshold, x + 1, y, visited)+ dfs(threshold, x - 1, y, visited)
+ dfs(threshold, x, y + 1, visited)+ dfs(threshold, x, y - 1, visited);
}
// 计算两数位和
private static int sum(int a, int b) {
int ret = 0;
while (a != 0) {
ret += a % 10;
a /= 10;
}
while (b != 0) {
ret += b % 10;
b /= 10;
}
return ret;
}
}
查看2道真题和解析