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;
}
};