力扣 63. 不同路径 II

42 阅读1分钟

image.png

image.png

这道题和第62题思路一致,但是在初始化和遍历的时候需要注意某个位置有障碍物,需要把这个位置的dp数组设为0,看代码:

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

        for(int i=0;i<m;i++){
            if(obstacleGrid[i][0]==0){
                dp[i][0]=1;
            }
            else{
                for(;i<m;i++)
                    dp[i][0]=0;
                break;
            }
        }

        for(int j=0;j<n;j++){
            if(obstacleGrid[0][j]==0){
                dp[0][j]=1;
            }
            else{
                for(;j<n;j++)
                    dp[0][j]=0;
                break;
            }
        }

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