动态规划-路径问题——63.不同路径||

1.题目解析

题目来源:63.不同路径||——力扣 

测试用例

2.算法原理

本题与之前的62.不同路径相似,但是多了一种情况那就是遇见障碍物,因为遇见障碍物就需要避开,也就是说障碍物所在的位置的路径数为0

1.状态表示

创建一个dp表,多开一行一列用来存储初始值,其中dp[i][j]所在的位置代表从起点到该位置的所有路径数

2.状态转移方程

因为每次移动只能右移或者下移,所以某位置路径数就是其上方位置与左边位置路径数之和:dp[i][j] = dp[i-1][j] + dp[i][j-1],这里只是多考虑了障碍物的情况为0,但是不妨碍相加

3.初始化

只需要初始化虚拟位置的dp[0][1]=1即可,这里也可以是dp[1][0],只需要保证dp[1][1]的位置是1就可以

4.填表顺序

从上至下,每一行从左到右

5.返回值

返回dp[m][n]即可

3.实战代码

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& ob) 
    {
        int m = ob.size(),n = ob[0].size(); 
        vector<vector<int>> dp(m+1,vector<int>(n+1));
        dp[0][1] = 1;
        for(int i = 1;i <= m;i++)
        {
            for(int j = 1;j <= n;j++)
            {
                //当没有遇到障碍物就直接相加上面的位置与左边的位置的所有情况
                //反之遇到障碍物dp[i][j] = 0
                if(ob[i-1][j-1] == 0)
                {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j];
                }
            }
        }
        return dp[m][n];
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值