64. 最小路径和
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int len_x = grid.size();
int len_y = grid[0].size();
int dp[len_y];
dp[0] = grid[0][0];
for(int j=1;j<len_y;++j)
dp[j] = dp[j-1] + grid[0][j];
for(int i=1;i<len_x;++i)
for(int j=0;j<len_y;++j)
if(j != 0)
dp[j] = min(dp[j], dp[j-1]) + grid[i][j];
else
dp[j] = dp[j] + grid[i][j];
return dp[len_y-1];
}
};
62. 不同路径
class Solution {
public:
int uniquePaths(int m, int n) {
int dp[n];
for(int j=0;j<n;++j)
dp[j] = 1;
for(int i=1;i<m;++i)
for(int j=0;j<n;++j)
if(j!=0)
dp[j] = dp[j] + dp[j-1];
else
dp[j] = 1;
return dp[n-1];
}
};
63. 不同路径 II
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int len_y = obstacleGrid.size();
int len_x = obstacleGrid[0].size();
int dp[len_x];
dp[0] = obstacleGrid[0][0]==1?0:1;
for(int j=1;j<len_x;++j){
dp[j] = dp[j-1];
if(obstacleGrid[0][j]==1)
dp[j] = 0;
}
for(int i=1;i<len_y;++i){
if(obstacleGrid[i][0] == 1)
dp[0] = 0;
for(int j=1;j<len_x;++j){
if(obstacleGrid[i][j] == 1)
dp[j] = 0;
else
dp[j] = dp[j] + dp[j-1];
}
}
return dp[len_x-1];
}
};