leetcode 63. 不同路径 II

2023.8.9

leetcode 63. 不同路径 II_第1张图片        这题是不同路径I的升级版,在路径上增加了障碍物,有障碍物的地方无法通过。

        我的思路依然还是使用动态规划,dp[i][j]的含义依然是到(i,j)这个位置的路径个数。只需要在dp数组中将有障碍物的地方赋为0。大致步骤如下:

  • 先进行极端情况判断:当起始位置为障碍物时,无法到达终点,直接返回0。
  • 然后对第一行和第一列进行初始化,有障碍物的地方赋为0,无障碍物的地方赋为其左方或者上方的值。
  • 用两个for循环递推赋值,递推公式和不同路径I 一样,当前位置的路径个数 = 上方位置路径个数 + 左方位置的路径个数。  

        代码如下:

class Solution {
public:
    int uniquePathsWithObstacles(vector>& obstacleGrid) {
        if(obstacleGrid[0][0] == 1) return 0; //起点就是障碍物
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        vector> dp(m , vector(n));
        dp[0][0] = 1;
        //第一行初始化赋值
        for(int i=1; i

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)