63. 不同路径 II
解题思路:
这题思路和62基本一致,不一样的地方在于细节处理,初始值的时候,如果遇到障碍,则障碍之后的dp值都为0,dp[i][j]的值要根据是否有障碍物来判断,如果有障碍物,它就是0,否则就是 d p ( i , j ) = d p ( i − 1 , j ) + d p ( i , j − 1 ) dp(i,j)=dp(i-1,j)+dp(i,j-1) dp(i,j)=dp(i−1,j)+dp(i,j−1)
源代码:
class Solution {
private:
int dp[110][110];
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int i,j;
if(obstacleGrid.size() <= 0 || obstacleGrid[0].size() <= 0) return 0;
int n = obstacleGrid.size(), m = obstacleGrid[0].size();
bool turn = false;
for(i=0;i<n;i++){
if(obstacleGrid[i][0] == 1 || turn){
dp[i][0] = 0;
turn = true;
}else dp[i][0] = 1;
}
turn = false;
for(j=0;j<m;j++){
if(obstacleGrid[0][j] == 1 || turn){
dp[0][j] = 0;
turn = true;
}else dp[0][j] = 1;
}
for(i=1;i<n;i++){
for(j=1;j<m;j++){
if(obstacleGrid[i][j] == 1) dp[i][j] = 0;
else dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[n-1][m-1];
}
};