Question
Tips
I think still use dynamic programming.
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
if(obstacleGrid[m-1][n-1]!=0)
return 0;
if(n==1 && m==1)
if(obstacleGrid[0][0]==0)
return 1;
else
return 0;
int **res;
res = new int*[m];
for(int i = 0; i < m; ++i)
res[i] = new int[n];
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
res[i][j]=0;
//Initialize
for(int i = n-2; i >= 0; --i)
if(obstacleGrid[m-1][i] != 0)
break;
else
res[m-1][i]=1;
for(int i = m-2; i >= 0; --i)
if(obstacleGrid[i][n-1] != 0)
break;
else
res[i][n-1] = 1;
//Bottom to top
int row = m-2, col = n-2;
while(row>=0 && col>=0){
for(int i = row; i>=0;--i)
if(obstacleGrid[i][col] != 0)
continue;
else{
if(obstacleGrid[i+1][col]==0)
res[i][col]+=res[i+1][col];
if(obstacleGrid[i][col+1]==0)
res[i][col]+=res[i][col+1];
}
for(int i=col-1;i>=0;--i)
if(obstacleGrid[row][i]!=0)
continue;
else{
if(obstacleGrid[row][i+1]==0)
res[row][i]+=res[row][i+1];
if(obstacleGrid[row+1][i]==0)
res[row][i]+=res[row+1][i];
}
--col;
--row;
}
return res[0][0];
}
};