63. 不同路径 IILeetCode

63. 不同路径 IILeetCode

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

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

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

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

示例 1:

img

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

示例 2:

img

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

提示:

  • m == obstacleGrid.length
  • n == obstacleGrid[i].length
  • 1 <= m, n <= 100
  • obstacleGrid[i][j]01

假设我们定义到达右下角的走法数为 dp(m,n), 因为右下角只能由它上方或者左方的格子走过去,因此可以很容易的写出递归求解式,即

dp(m, n) = dp(m - 1, n) + dp(m, n - 1);

image-20240405200718315

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

        for(int i = 1; i < m; i ++)
            for(int j = 1; j < n; j ++)
                dp[i][j] = (obstacleGrid[i][j] == 1 ? 0 : dp[i - 1][j] + dp[i][j - 1]);
        
        return dp[m - 1][n - 1];
    }
};

image-20240405200456819

相关推荐

  1. leetcode 63.不同路径II

    2024-04-07 01:20:02       45 阅读
  2. 【Leetcode】63- 不同路径II

    2024-04-07 01:20:02       41 阅读
  3. LeetCode[62] 不同路径

    2024-04-07 01:20:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 01:20:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 01:20:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 01:20:02       87 阅读
  4. Python语言-面向对象

    2024-04-07 01:20:02       96 阅读

热门阅读

  1. 自学考试指定教材00023 高等数学(工本) 目录

    2024-04-07 01:20:02       33 阅读
  2. 蓝桥真题、幸运数

    2024-04-07 01:20:02       28 阅读
  3. 继承 多态 向上转型 向下转型

    2024-04-07 01:20:02       39 阅读
  4. 第五章:CSS预处理器入门

    2024-04-07 01:20:02       34 阅读
  5. 为啥python’hello‘>‘world‘是false

    2024-04-07 01:20:02       31 阅读
  6. 端盒日记Day02

    2024-04-07 01:20:02       39 阅读
  7. C语言结构体深度剖析

    2024-04-07 01:20:02       45 阅读
  8. 构建一个基于IIoT的智能工厂

    2024-04-07 01:20:02       51 阅读
  9. Jupyter Notebook中常见的快捷键

    2024-04-07 01:20:02       50 阅读