Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0] ]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
Array Dynamic Programming
Have you met this question in a real interview?
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int row=obstacleGrid.size();
if(row==0)
return 0;
int col=obstacleGrid[0].size();
if(col==0)
return 0;
int **arr=new int*[row];
for(int i=0;i<row;i++)
{
arr[i]=new int[col];
memset(arr[i],0,sizeof(int)*col);
}
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
if(i==0&&j==0)
{
if(obstacleGrid[i][j]==1)//如果第一空格上有障碍,直接返回0
return 0;
else
arr[i][j]=1;
}
else if(i==0&&j!=0)
{
if(obstacleGrid[i][j]==1)//有障碍,该条路不同,arr[i][j]赋0
arr[i][j]=0;
else
arr[i][j]=arr[i][j-1];
}
else if(i!=0&&j==0)
{
if(obstacleGrid[i][j]==1)
arr[i][j]=0;
else
arr[i][j]=arr[i-1][j];
}
else{
if(obstacleGrid[i][j]==1)
arr[i][j]=0;
else
arr[i][j]=arr[i-1][j]+arr[i][j-1];
}
}
return arr[row-1][col-1];
}
};