LeetCode64. 最小路径和
和62. 不同路径的dp思路相似,考虑权值的来源只能为左侧和上侧格子,取较小者
可原地修改
Code:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(!i&!j)continue;
else if(!i)grid[i][j]+=grid[i][j-1];
else if(!j)grid[i][j]+=grid[i-1][j];
else grid[i][j]+=min(grid[i-1][j],grid[i][j-1]);
}
}
return grid[m-1][n-1];
}
};
同样可做120. 三角形最小路径和
分析格子权值和来源即可,注意这题是要取最底层的最小权值
Code:
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n=triangle.size();
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
if(!i&!j)continue;
else if(j==0)triangle[i][j]+=triangle[i-1][j];
else if(j==i)triangle[i][j]+=triangle[i-1][j-1];
else triangle[i][j]+=min(triangle[i-1][j],triangle[i-1][j-1]);
}
}
int ans=0x3f3f3f3f;
for(int i=0;i<n;i++)ans=min(ans,triangle[n-1][i]);
return ans;
}
};