机器人的运动范围

机器人的运动范围

http://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8

1、分治思想
f(i, j) = 1 + f(i - 1, j) + f(i + 1, j) + f(i, j - 1) + f(i, j + 1)

1、f(i, j)入参判断是否有效
2、是否重复

class Solution {
public:
    int movingCount(int threshold, int rows, int cols)
    {
        bool visited[rows * cols];
        for (int i = 0; i < rows * cols; i++) {
            visited[i] = false;
        }
        return MovingCore(0, 0, rows, cols, visited, threshold);
    }

    int MovingCore(int i, int j, int rows, int cols, bool *visited, int threshold)
    {
        if (i >= rows || i < 0 || j >= cols || j < 0) {
            return 0;
        }
        if (GetSum(i) + GetSum(j) > threshold) {
            return 0;
        }
        if (visited[i * cols + j]) {
            return 0;
        }
        visited[i * cols + j] = true;
        return 1 + MovingCore(i - 1, j, rows, cols, visited, threshold) +
               MovingCore(i + 1, j, rows, cols, visited, threshold) +
               MovingCore(i, j - 1, rows, cols, visited, threshold) +
               MovingCore(i, j + 1, rows, cols, visited, threshold);
    }

    int GetSum(int num)
    {
        int count = 0;
        while (num > 0) {
            count = count + num % 10;
            num = num / 10;
        }
        return count;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
榕城小榕树:你是我见过最幸福的牛客男孩
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:22
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务