LeetCode 120. Triangle
Solution1:我的答案
真费劲啊!!!
啊!!!!!!
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (!triangle.size()
|| !triangle[0].size()) // || 是短路运算符
return 0;
int m = triangle.size(), min_path = INT_MAX;
for (int i = 0; i < m - 1; i++) {
for (int j = 0; j < triangle[i].size(); j++) {
if (i == 0) {
triangle[1][0] += triangle[0][0];
triangle[1][1] += triangle[0][0];
}
else if (j == 0)
triangle[i+1][j] += triangle[i][j];
else if (j == triangle[i].size() - 1) {
triangle[i+1][j+1] += triangle[i][j];
triangle[i+1][j] += min(triangle[i][j-1],
triangle[i][j]);
}
else {
triangle[i+1][j] += min(triangle[i][j-1],
triangle[i][j]);
}
}
}
for (int i = 0; i < triangle[m-1].size(); i++)
min_path = min(min_path, triangle[m-1][i]);
return min_path;
}
};
Solution2:我的答案改进版
这个代码只对等边三角形有效,但是也能AC了~~~
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (!triangle.size()
|| !triangle[0].size()) // || 是短路运算符
return 0;
int m = triangle.size(), min_path = INT_MAX;
for (int i = 1; i < m; i++) {
for (int j = 0; j < triangle[i].size(); j++) {
if (j == 0)
triangle[i][j] += triangle[i-1][j];
else if (j == triangle[i].size() - 1)
triangle[i][j] += triangle[i-1][j-1];
else
triangle[i][j] += min(triangle[i-1][j-1],
triangle[i-1][j]);
}
}
for (int i = 0; i < triangle[m-1].size(); i++)
min_path = min(min_path, triangle[m-1][i]);
return min_path;
}
};
本文提供了一种解决LeetCode 120题“Triangle”最小路径和问题的有效算法实现。通过两次迭代改进,最终的代码简化了原始思路,实现了对输入三角形数组的动态规划处理,有效地找到了从顶点到底部的最小路径总和。
180

被折叠的 条评论
为什么被折叠?



