题解 | #机器人的运动范围#
机器人的运动范围
https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param threshold int整型
* @param rows int整型
* @param cols int整型
* @return int整型
*/
func movingCount( threshold int , rows int , cols int ) int {
// write code here
var ans int
var visted = make([][]bool, rows)
for i := range visted {
visted[i] = make([]bool, cols)
}
ways := [][]int{{-1, 0}, {0, 1}, {1, 0}, {0, -1}}
var overBoard = func(i, j int) bool {
return i < 0 || i >= rows || j < 0 || j >= cols
}
var sumOfDit func(num int) int
sumOfDit = func(num int) int {
sum := 0
for num != 0 {
digit := num % 10 // 取得最低位的数字
sum += digit // 将数字加到总和上
num /= 10 // 去掉最低位
}
return sum
}
var dfs func(i, j int)
dfs = func(i, j int) {
// 1. 满足条件, 记录
if (sumOfDit(i) + sumOfDit(j)) <= threshold && !visted[i][j] {
ans++
visted[i][j] = true
} else {
// 2. 终止
return
}
// 继续搜索
for _, w := range ways {
ni := i + w[0]
nj := j + w[1]
if overBoard(ni, nj) { continue }
if visted[ni][nj] { continue }
dfs(ni, nj)
}
}
dfs(0, 0)
return ans
}