62.不同路径
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m,vector<int>(n,0));
for(int i=0;i<m;i++)
dp[i][0] = 1;
for(int j=0;j<n;j++)
dp[0][j] = 1;
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[i][j] = dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
63. 不同路径 II
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if(obstacleGrid.size()==1&&obstacleGrid[0].size()==1)
if(obstacleGrid[0][0]==1)
return 0;
else
return 1;
vector<vector<int>> dp(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));
for(int i=0;i<dp.size();i++){
if(obstacleGrid[i][0]==0)
dp[i][0] = 1;
else
break;
}
for(int j=0;j<dp[0].size();j++){
if(obstacleGrid[0][j]==0)
dp[0][j] = 1;
else
break;
}
if(obstacleGrid.size()==1||obstacleGrid[0].size()==1){
return dp[dp.size()-1][dp[0].size()-1];
}
for(int i=1;i<dp.size();i++){
for(int j=1;j<dp[0].size();j++){
if(obstacleGrid[i][j]==1)
continue;
dp[i][j] = dp[i][j-1] + dp[i-1][j];
}
}
return dp[dp.size()-1][dp[0].size()-1];
}
};