在Unique Path的基础上增加了有些不能增加的石块
方法还是动态规划,没有改变
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m=obstacleGrid.size();
if(m<=0) return 0;
int n=obstacleGrid[0].size();
vector<vector<int>> r;
r.resize(m);
for(int i=0;i<m;i++) r[i].resize(n);
r[0][0]=1-obstacleGrid[0][0];
for(int i=1;i<m;i++)
{
if(r[i-1][0]==0 || obstacleGrid[i][0]==1)
r[i][0]=0;
else
r[i][0]=1;
}
for(int i=1;i<n;i++)
{
if(r[0][i-1]==0 || obstacleGrid[0][i]==1)
r[0][i]=0;
else
r[0][i]=1;
}
for(int mi=1;mi<m;mi++)
{
for(int ni=1;ni<n;ni++)
{
if(obstacleGrid[mi][ni]==1)r[mi][ni]=0;
else
{
int tmp=0;
if(obstacleGrid[mi-1][ni]==0) tmp+=r[mi-1][ni];
if(obstacleGrid[mi][ni-1]==0) tmp+=r[mi][ni-1];
r[mi][ni]=tmp;
}
}
}
return r[m-1][n-1];
}
};