2025每日刷题(219)
Leetcode---120. 三角形最小路径和

实现代码
cpp
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
const int m = triangle.size();
vector<int> dp(m + 1, 0);
// dp[0] = 2
// dp[0] = 5 dp[1] = 6
// dp[0] = 11 dp[1] = triangle[i][j] + min(dp[j - 1], dp[j])
for(int i = 0; i < m; ++i) {
vector<int> tmp(dp);
for(int j = 0; j <= i; ++j) {
if(j == 0 && i == 0) {
tmp[j] = triangle[i][j];
} else if(j == 0) {
tmp[j] += triangle[i][j];
} else if(j == i) {
tmp[j] = triangle[i][j] + dp[j - 1];
} else {
tmp[j] = triangle[i][j] + min(dp[j - 1], dp[j]);
}
}
dp = tmp;
}
return *min_element(dp.begin(), dp.begin() + m);
}
};
运行结果

逆向实现代码
cpp
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
for(int i = triangle.size() - 2; i >= 0; --i) {
for(int j = 0; j <= i; ++j) {
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]);
}
}
return triangle[0][0];
}
};
运行结果

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!