63.不同路径Ⅱ

  • 题目:63.不同路径Ⅱ
  • 思路:
    与62题62.不同路径的区别:矩阵中的某些格子有障碍,代表不能到达,应该把dp [ i ] [ j ] = 0即可;
    那么,就无法使用组合数了;
    若使用DP,无法有华为一维数组dp,因为有障碍,初始化都不同,而使用一维数组时,默认第一行第一列都为1,因此dp[ i ] += dp[ i - 1 ]时,若逐行算,当第一列中有障碍时,有的行的第一列应该+=0,有的应该+=1,会出现不一致的情形,因此无法作此优化;
    1.DP:O(mn),O(mn)
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int row = obstacleGrid.size();
        int column = obstacleGrid[0].size();
        vector<vector<int>> dp(row, vector<int>(column, 0));
        for (int i = 0; i < row && obstacleGrid[i][0] == 0; ++i) {//初始化第一列:与62题的区别在于一旦某处出现了障碍,后面都无法到达,只能初始化为0
            dp[i][0] = 1;
        }
        for (int j = 0; j < column && obstacleGrid[0][j] == 0; ++j) {//初始化第一行:同上
            dp[0][j] = 1;
        }
        for (int i = 1; i < row; ++i) {
            for (int j = 1; j < column; ++j) {
                if (obstacleGrid[i][j] == 1) dp[i][j] = 0;//与62的区别在于:某处有障碍,代表无法到达
                else dp[i][j] = dp[i][j - 1] + dp[i - 1][j];//没障碍,才能用dp公式更新;
            }
        }  
        return dp[row - 1][column - 1];
    }
};
上一篇:ZigBee协议栈中AES加密算法


下一篇:每日一题62-不同路径