解法和unique path 1(http://blog.csdn.net/revoir/article/details/51241360)极其相似,多了几个边界条件。
坑:
1. 有block的时候需要初始化。在初始化的过程中,遇到一个block后面去安为0.
2. 初始化第一行的时候要单独做,初始获第一列的时候可以再for循环嵌套中作
3. 一开始的返回条件要包含第一个格子就是墙的情况
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if(obstacleGrid.size()==0||obstacleGrid[0][0]==1)
return 0;
int m=obstacleGrid.size();
int n=obstacleGrid[0].size();
vector<int> memo(n,1);
for(int j=1;j<n;++j){
if(obstacleGrid[0][j]==1)
memo[j]=0;
else
memo[j]=memo[j-1];
}
for(int i=1;i<m;++i){
if(obstacleGrid[i][0]==1)
memo[0]=0;
for(int j=1;j<n;++j){
if(obstacleGrid[i][j]==1)
memo[j]=0;
else
memo[j]+=memo[j-1];
}
}
return memo[n-1];
}