您的位置:首页 > 其它

Leetcode 120. Triangle

2018-01-26 11:27 309 查看
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n = triangle.size();
if (n == 0) return 0;
if (n == 1) return triangle[0][0];
vector<int> dp(n, 0);
dp[0] = triangle[0][0];

for (int i = 1; i != n; ++i) {
dp[i] = dp[i - 1] + triangle[i][i];
for (int j = i - 1; j != 0; --j) {
dp[j] = min(dp[j], dp[j - 1]) + triangle[i][j];
}
dp[0] += triangle[i][0];
}
return *min_element(cbegin(dp), cend(dp));
}
};


参考后

从后向前,省了不少运算

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int n = triangle.size();
if (n == 0) return 0;

vector<int> dp(triangle[n - 1]);

for (int i = n - 2; i >= 0; --i) {
for (int j = 0; j <= i; ++j) {
dp[j] = min(dp[j], dp[j + 1]) + triangle[i][j];
}
}
return dp[0];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: