描述
m 和 n 均不超过100
您在真实的面试中是否遇到过这个题?
是
样例
如下所示在3x3的网格中有一个障碍物:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
一共有2条不同的路径从左上角到右下角。
在每次计算的时候要判断是否为1,要注意的点是如果下边和右边有障碍,这边后来的路径都是0;
class Solution {
public:
/**
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid) {
// write your code here
if(obstacleGrid.size()==0) return 0;
if(obstacleGrid[0].size()==0) return 0;
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
vector<vector<int>> pathSum(m,vector<int>(n,0X7FFFFFFF));
for(int i=m-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
if(obstacleGrid[i][j]==1) pathSum[i][j]=0;
else if(i==m-1&&j==n-1) pathSum[i][j]=1;
else if(i==m-1) pathSum[i][j]=pathSum[i][j+1];
else if(j==n-1) pathSum[i][j]=pathSum[i+1][j];
else pathSum[i][j]=pathSum[i+1][j]+pathSum[i][j+1];
}
}
return pathSum[0][0];
}
};