Leetcode典型题解答和分析、归纳和汇总——T63(不同路径II)

题目描述:

一个机器人位于一个m*n网格的左上角(起始点在start位置),机器人每次都只能向下或者向右移动。机器人试图达到目的地(finish)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径。

题目解析:

该题与前面一题异曲同工,唯一的差别在于如何将障碍物这条路径排除在外。首先我们还是要找出递推公式:

在开始位置时,只有一条路径;当在第一行或者第一列时,路径数目与前一个状态相同。其余则是左边+上边路径数目。

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

        long dp[m][n];  //这里采用long型整数
        if(obstacleGrid[0][0]==1) return 0;

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
            {
                if(i==0&&j==0) dp[i][j]=1;
                else if(i==0&&j!=0) dp[i][j]=(obstacleGrid[i][j]==1?0:dp[i][j-1]);
                else if(i!=0&&j==0) dp[i][j]=(obstacleGrid[i][j]==1?0:dp[i-1][j]);
                else dp[i][j] = (obstacleGrid[i][j]==1?0:(dp[i-1][j]+dp[i][j-1]));
            }
        }
        return static_cast<int>(dp[n-1][m-1]);
    }
};
发布了56 篇原创文章 · 获赞 7 · 访问量 4459

猜你喜欢

转载自blog.csdn.net/weixin_44504987/article/details/104446758