剑指 Offer 13. 机器人的运动范围

题目描述

在这里插入图片描述

思路分析

建立路径,模拟机器人路径,将可以到达的地方全部置为1,最后统计1的个数即可。
由于从左上角开始,因此每次向下向右移动即可。限制条件也可以少两个

代码展示

class Solution {
public:
    bool arr[100][100] = {0};
    int movingCount(int m, int n, int k) {
        int sum = 0;
        dfs(0, 0, m, n, k);
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (arr[i][j] == 1) {
                    sum++;
                }
            }
        }
        return sum;
    }
    void dfs(int startrow, int startcol, int maxrow, int maxcol, int k) {
        if (arr[startrow][startcol] == 1 || startrow >= maxrow || startcol >= maxcol || _get_sum(startcol,startrow) > k) {//条件不满足退出
            return;
        }
        arr[startrow][startcol] = 1;
        dfs(startrow+1, startcol, maxrow, maxcol, k);
        dfs(startrow, startcol+1, maxrow, maxcol, k);
    }
    int _get_sum(int i, int j) {
        int sum = 0;
        while (i) {
            sum += i % 10;
            i /= 10;
        }
        while (j) {
            sum += j % 10;
            j /= 10;
        }
        return sum;
    }
};

结果分析

在这里插入图片描述
时间复杂度 O(N)
空间复杂度 O(N)
时间上面,遍历数组,并且进行dfs
空间上,创建数组,并且函数调用栈占据空间。

猜你喜欢

转载自blog.csdn.net/ifwecande/article/details/107810265