题解 | #机器人的运动范围#

机器人的运动范围

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
}

全部评论

相关推荐

我就是0offer糕手:北大不乱杀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务