代码随想录算法训练营第39天 | 62.不同路径 63.不同路径II

62.不同路径

        这道题我记得之前是用深搜(我到现在自己还没法独立写出,但是用动态规划的话我现在已经回了,其实也就是找出dp[i][j]表示到第i行第j列的路径数量,初始化的话是第一行和第一列都为1,因为到第一行和第一列的点的路径只有1。

https://leetcode.cn/problems/unique-paths/

class Solution {
public:
    int uniquePaths(int m, int n) {
        int ** maze=new int*[m];
        for(int i=0;i<m;i++)
        {
            maze[i]=new int[n];
        }
        for(int j=0;j<n;j++)
        {
            maze[0][j]=1;
        }
        for(int j=0;j<m;j++)
        {
            maze[j][0]=1;
        }
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                maze[i][j]=maze[i-1][j]+maze[i][j-1];
            }
        }
        return maze[m-1][n-1];
    }
};

63.不同路径II

        这道题一上来我是懵逼的,为啥出来个障碍物,有了障碍物的话怎么办?想清楚这个问题就简单了,障碍物影响初始化,本来第一行和第一列的dp都是等于1,现在有了障碍物,第一行障碍物以及 障碍物右边都为0,(因为没有路可以走到这些点),同理,第一列障碍物以及障碍物下面都为0。当有障碍物时,dp[i][j]=0(就相当于还是初始化0的那个值,不用变),而如果没有障碍物,还是根据dp[i][j]=dp[i-1][j]+dp[i][j-1]计算。(我的代码写的result也就是dp)

https://leetcode.cn/problems/unique-paths-ii/submissions/508506750/

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size();
        int n=obstacleGrid[0].size();  
        if(obstacleGrid[m-1][n-1]==1||obstacleGrid[0][0]==1)
        return 0;
        vector<vector<int>>result(m,vector<int>(n,0));
        for(int i=0;i<m&&obstacleGrid[i][0]==0;i++)
        {
            result[i][0]=1;
        }
        for(int j=0;j<n&&obstacleGrid[0][j]==0;j++)
        {
            result[0][j]=1;
        }
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                if(obstacleGrid[i][j]==0)
                {
                    result[i][j]=result[i-1][j]+result[i][j-1];
                }
            }
        }
        return result[m-1][n-1];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值