63.Unique Paths II

思路:
  • dfs,超时
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        return dfs(obstacleGrid,m,n,0,0);
    }
    int dfs(vector<vector<int>>& obstacleGrid,int m,int n,int curi,int curj){
       if(curi > m-1 || curj > n-1) return 0;
       if(obstacleGrid[curi][curj] == 1) return 0;
       else{
           if(curi == m-1 && curj == n-1) return 1;
           return dfs(obstacleGrid,m,n,curi+1,curj) + dfs(obstacleGrid,m,n,curi,curj+1);
       }
    }
};
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        vector<vector<int>>dp(m,vector<int>(n,0));
        if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1) return 0;
        dp[0][0] = 1;
        for(int i = 1; i < n; i++){
            if(obstacleGrid[0][i] == 1) dp[0][i] = 0;
            else{
                dp[0][i] = dp[0][i-1];
            }
        }
        for(int i = 1; i < m; i++){
            if(obstacleGrid[i][0] == 1) dp[i][0] = 0;
            else{
                dp[i][0] = dp[i-1][0];
            }
        }
        
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                if(obstacleGrid[i][j] == 1) dp[i][j] = 0;
                else dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
        
    }
};
原文地址:https://www.cnblogs.com/UniMilky/p/6978730.html