63. Unique Paths II-Leetcode

与上一题相比

不同之处在于有了obstacle,差别在于到每个obstacle的可能路径个数为0。
用一个dp数组来维护每一行便利完之后的路径个数,只是在更新dp数组时需要考虑obstacleGrid数组相应位子的值是否为0

我的AC代码

class Solution {
    //如果obstacles的值为1,则此位置的值设为0
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size();//行数
        int n=obstacleGrid[0].size();//列数
        vector<int> dp(n+1,0);
        dp[1]=1;
        for(int i=0;i<m;i++)//
            for(int j=1;j<=n;j++)
            {
                if(obstacleGrid[i][j-1]==1)
                    dp[j]=0;
                else
                    dp[j]+=dp[j-1];
            }
      return dp.back();  
    }
};

最优解

时间上优于我的解法(目前还没找到原因),空间上没有单数组维护申请的额外空间少

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid.at(0).size();
        int path[m + 1][n + 1];
        for (int i = 0; i < (m + 1); i++) path[i][0] = 0;
        for (int i = 0; i < (n + 1); i++) path[0][i] = 0;
        for (int i = 1; i < (m + 1); i++) {
            for (int j = 1; j < (n + 1); j++) {
                if (obstacleGrid.at(i - 1).at(j - 1) == 1) path[i][j] = 0;
                else {
                    if ((i == 1) && (j == 1)) {
                        path[i][j] = 1;
                    } else {
                        path[i][j] = path[i - 1][j] + path[i][j - 1];
                    }
                }
            }
        }
        return path[m][n];
    }
};
    原文作者:analanxingde
    原文地址: https://www.jianshu.com/p/494381967571
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞