【动态规划专栏】专题二:路径问题--------2.不同路径II

简介: 【动态规划专栏】专题二:路径问题--------2.不同路径II


题目来源

本题来源为:

Leetcode 63. 不同路径 II

题目描述

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

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

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

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

题目解析

本题是在不同路径I的基础上加了一个障碍物。

机器人在行走过程中要越过障碍物。

算法原理

1.状态表示

经验+题目要求

对于本题而言就是:

dp[i][j]表示:到达[i,j]位置的时候,一共有多少种方法

2.状态转移方程

其实本题的状态转移方程是很好推的,只用在原来那道不同路径I的基础上加一层判断即可,判断有无障碍物,有障碍物就为0

因此状态方程为:

3.初始化

本题初始化跟之前不同路径I的初始化是一样的。详细讲解过程在不同路径I中详细介绍过

4.填表顺序

从上往下填每一行,每一行从左往右

5.返回值

返回dp[m][n]

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int uniquePathsWithObstacles(vector<vector<int>>& ob) 
    {
        //
        int m=ob.size(),n=ob[0].size();
        //创建dp表
        vector<vector<int>> dp(m+1,vector<int>(n+1));
        //初始化
        dp[1][0]=1;
        //填表
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                //判断是否为障碍物
                if(ob[i-1][j-1]==0)
                {
                    //抄状态转移方程
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }
            }
        }
        return dp[m][n];
    }
};

时间复杂度:O(MN)
空间复杂度:O(M
N)

相关文章
|
3天前
|
算法 机器人
【动态规划专栏】专题二:路径问题--------5.最小路径和
【动态规划专栏】专题二:路径问题--------5.最小路径和
23 0
|
3天前
|
算法
【动态规划专栏】专题二:路径问题--------4.下降路径最小和
【动态规划专栏】专题二:路径问题--------4.下降路径最小和
25 2
|
3天前
|
算法 机器人
【动态规划专栏】专题二:路径问题--------1.不同路径
【动态规划专栏】专题二:路径问题--------1.不同路径
27 1
|
3天前
|
算法
【动态规划】路径问题(上)
【动态规划】路径问题
7 0
|
3天前
|
算法
【动态规划】路径问题(下)
【动态规划】路径问题
7 0
【动态规划】路径问题(下)
|
3天前
|
机器人
动态规划|【路径问题】63.不同路径II
动态规划|【路径问题】63.不同路径II
|
3天前
|
算法 机器人 BI
动态规划|【路径问题】|62.不同路径I
动态规划|【路径问题】|62.不同路径I
|
10月前
|
算法 机器人
【学会动态规划】不同路径(5)
【学会动态规划】不同路径(5)
46 1
|
7月前
|
算法
【学会动态规划】不同路径 II(6)
【学会动态规划】不同路径 II(6)
28 0