地址
https://leetcode-cn.com/problems/unique-paths/
https://leetcode-cn.com/problems/unique-paths-ii/submissions/
https://leetcode-cn.com/problems/minimum-path-sum/submissions/
描述
思想
代码
I
class Solution {
public:
int uniquePaths(int n, int m) {
vector<vector<int>> f(n,vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
//f[0][0]=1;
if(!i&&!j) f[i][j]=1;
else {
//没办法从上面走下来
if(!i) f[i][j]+=f[i][j-1];
//没办法从左边向右走过来
if(!j) f[i][j]+=f[i-1][j];
if(i&&j) f[i][j]+=f[i-1][j]+f[i][j-1];
}
}
}
return f[n-1][m-1];
}
};
II
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& map) {
int n=map.size(),m=map[0].size();
vector<vector<int>> f(n,vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
//有障碍物跳过
if(!map[i][j]){
if(!i&&!j) f[i][j]=1;
else {
//没办法从上面走下来
if(!i) f[i][j]+=f[i][j-1];
//没办法从左边向右走过来
if(!j) f[i][j]+=f[i-1][j];
if(i&&j) f[i][j]+=f[i-1][j]+f[i][j-1];
}
}
}
}
return f[n-1][m-1];
}
};
064
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n=grid.size(),m=grid[0].size();
vector<vector<int>> f(n,vector<int>(m,INT_MAX));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!i&&!j) f[i][j]=grid[i][j];
else {
if(i) f[i][j]=min(f[i][j],f[i-1][j]+grid[i][j]);
if(j) f[i][j]=min(f[i][j],f[i][j-1]+grid[i][j]);
}
}
}
return f[n-1][m-1];
}
};