随想录训练营34/60 | LC 62.不同路径;LC 63. 不同路径 II

文章介绍了两道LeetCode上的编程题——LC62.不同路径和LC63.不同路径II,都是关于寻找网格中从左上角到右下角的不同路径数量的问题。解题思路利用了动态规划,创建二维数组表示路径,初始化第一行和第一列,然后遍历剩余部分,路径遇到障碍物时值设为0。
摘要由CSDN通过智能技术生成

LC 62.不同路径

题目链接LC 62.不同路径
思路:之前的DP数组都是一维的;这道题是二维的;也是先举一个小例子,发现第一行和第一列都是1;然后第二行第二列开始为前一个数和上一个数之和,后面都是这样,因此遍历除第一行和第一列的数组就好。
代码

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m, vector<int>(n, 0));//m*n的二维数组,所有值初始化为0
        //初始化第一列
        for(int i=0; i<m; i++){
            dp[i][0]=1;
        }
        //初始化第一行
        for(int j=0; j<n; j++){
            dp[0][j]=1;
        }
        //遍历剩余数组
        for(int a=1; a<m; a++){
            for(int b=1; b<n; b++){
                dp[a][b] = dp[a-1][b]+dp[a][b-1];
            }
        }
        return dp[m-1][n-1];
    }
};

LC 63. 不同路径 II

题目链接LC 63. 不同路径 II
思路:按照上题思路,然后将障碍物的位置dp设置为0。注意初始化的时候,若遇到障碍物,则后面的不用初始化为1,直接break。
代码

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();//行数
        int n = obstacleGrid[0].size();//列数
        vector<vector<int>> dp(m, vector<int>(n,0));//创建m*n的dp数组
        if(obstacleGrid[0][0]==1)return 0;
        //同样初始化,但是若有障碍就不初始化为1了
        for(int i=0; i<m; i++){
            if(obstacleGrid[i][0]==1)break;
            dp[i][0]=1;
        }
        for(int j=0; j<n; j++){
            if(obstacleGrid[0][j]==1)break;
            dp[0][j]=1;
        }
        //遍历整个数组
        for(int a=1; a<m; a++){
            for(int b=1; b<n; b++){
                if(obstacleGrid[a][b]==1)continue;
                dp[a][b] = dp[a-1][b]+ dp[a][b-1];
            }
        }
        return dp[m-1][n-1];
   }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值