思路:动态规划。遇到1时,将dp数组在该位置的值设置成0;然后根据公式dp[i][j]=dp[i][j-1]+dp[i-1][j]计算即可。
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if(obstacleGrid.size()==0||obstacleGrid[0].size()==0||obstacleGrid[0][0]==1) return 0;
int m=obstacleGrid.size(),n=obstacleGrid[0].size();
vector<vector<int> > dp(m,vector<int>(n,0));
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
{
if(obstacleGrid[i][j]==1) dp[i][j]==0;
else if(i==0&&j==0) dp[i][j]=1;
else if(i==0&&j>0) dp[i][j]=dp[i][j-1];
else if(i>0&&j==0) dp[i][j]=dp[i-1][j];
else dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
return dp[m-1][n-1];
}
};