一、题目描述
二、解题思路
方法1:深度优先搜索,需要用一个二维数组来保存机器人是否进入过某个坐标[row,col],避免重复计算,先向一个方向搜索到底,再回溯到上一个节点,从这个节点开始沿另一个方向搜索。
踩了一个坑:JS用Array.fill()初始化二维数组的方式要注意,查了一下才知道:JS中用Array.fill() 初始化 二维数组。
思路主要参考这一篇:DFS和BFS解决机器人的运动范围.
方法2:广度优先搜索。。。(先鸽着,等学会了再来)
三、代码实现
方法1:
var movingCount = function (m, n, k) {
function cal(i) {
let sum = 0
while (i) {
sum += i % 10
i = Math.floor(i/10)
}
return sum
}
function dfs(row, col, visited) {
if (row >= 0 && row < m && col >= 0 && col < n && !visited[row][col] && cal(row) + cal(col) <= k) {
visited[row][col] = true
return (
1 +
dfs(row - 1, col, visited) +
dfs(row + 1, col, visited) +
dfs(row, col - 1, visited) +
dfs(row, col + 1, visited)
)
}
return 0
}
if (m <= 0 || n <= 0 || k < 0) return 0
let visited = new Array(m).fill(false).map(() => new Array(n).fill(false))
// 不能这样初始化二维数组,第二维里面的值会指向同一个地址,改一个全部变
// let visited = new Array(m).fill(new Array(n).fill(false))
let count = dfs(0,0,visited)
return count
};