• leetcode 63. 不同路径 II(dp)



    作者简介:C/C++ 、Golang 领域耕耘者,创作者
    个人主页:作者主页
    活动地址:CSDN21天学习挑战赛
    题目来源: leetcode官网
    如果感觉博主的文章还不错的话,还请关注➕ 、点赞👍 、收藏🧡三连支持一下博主哦~~~

    💜 题目描述

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

    机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

    现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

    网格中的障碍物和空位置分别用 1 和 0 来表示。

    在这里插入图片描述

    示例1:

    输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
    输出:2
    解释:3x3 网格的正中间有一个障碍物。
    从左上角到右下角一共有 2 条不同的路径:

    1. 向右 -> 向右 -> 向下 -> 向下
    2. 向下 -> 向下 -> 向右 -> 向右

    在这里插入图片描述

    示例2:

    输入:obstacleGrid = [[0,1],[0,0]]
    输出:1

    🧡 算法分析

    此题和上一题方法一样,唯一不同就是增加一个障碍物。

    所以只需在递归时候判断一下是否满足条件,如没有障碍物,则加上此条路径;反之,跳过。

    💚 代码实现

    class Solution {
    public:
        int uniquePathsWithObstacles(vector<vector<int>>& nums) {
            // 这题和上面的题做一下对比,在有的公司遇到过
            if(!nums.size()) return 0;
            int n = nums.size();
            int m = nums[0].size();
            // if(n == 1 && m == 1 && nums[0][0] == 1) return 0;
    
            vector<vector<int>> ans(n, vector<int>(m));
            for(int i = 0; i < n; i++)
                for(int j = 0; j < m; j ++)
                    if(!nums[i][j])  // 非0才可以继续走
                    {
                        if(!i && !j) ans[i][j] = 1;
                        else
                        {
                            if(i) ans[i][j] += ans[i - 1][j];
                            if(j) ans[i][j] += ans[i][j - 1];
                        }
                    }
            return ans[n - 1][m - 1];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    执行结果:

    在这里插入图片描述

    💙 时间复杂度分析

    时间复杂度为O(m * n)

    如果觉得对你有帮助的话:
    👍 点赞,你的认可是我创作的动力!
    🧡 收藏,你的青睐是我努力的方向!
    ✏️ 评论,你的意见是我进步的财富!

  • 相关阅读:
    插件收集(idea Communtity Edtion)
    Elasticsearch之mapping
    HBase的逻辑结构与物理结构
    JAVA学习笔记- - - day 2
    [Linux] 网络层-----IP协议、ICMP协议、NAT技术
    HCIE云计算
    中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
    可编程数据平面(论文阅读)
    GEO的表达矩阵的探针ID转换成基因名称教程
    Python表白比心
  • 原文地址:https://blog.csdn.net/qq_39486027/article/details/126438680