//类似于unique path,只是加了
//1.第一列第一次出现1在哪一行,在此之后就是0而不是1,因为(0,0)点无法直接向下到达之后的点
//2.每当遇到1的时候,f[j]就是0
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
vector<int> f(n,0);
if(obstacleGrid[0][0]||obstacleGrid[m-1][n-1])
return 0;
int firstline=INT_MAX;
for(int i=0;i<m;i++)
{
if(obstacleGrid[i][0])
{firstline=i;
break;}
}
for(int i=0;i<m;i++)
{
if(i>=firstline)f[0]=0;
else f[0]=1;
for(int j=1;j<n;j++)
{
if(!obstacleGrid[i][j])
f[j]=f[j-1]+f[j];
else
f[j]=0;
}
}
return f[n-1];
}
};