您的位置:首页 > 其它

120. Triangle

2016-07-26 20:59 337 查看
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]


The minimum path sum from top to bottom is 
11
 (i.e., 2 + 3 + 5 + 1 =
11).

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
vector<int> dp(triangle[triangle.size()-1].size(), 0);
if (triangle.size() == 0) return 0;
dp[0] = triangle[0][0];
for (int i = 1; i < triangle.size(); i++){
for (int j = triangle[i].size() - 1; j >= 0; j--){
if (j == triangle[i].size() - 1){
dp[j] = dp[j - 1] + triangle[i][j];
}
else if (j == 0){
dp[j] = dp[j] += triangle[i][j];
}
else{
dp[j] = min(dp[j], dp[j - 1]) + triangle[i][j];
}
}
}
int res = INT_MAX;
for (int n : dp){
if (n < res){
res = n;
}
}
return res;
}
};

当然如果允许改动triangle数组里面的值可以,从下往上递推。O(1)的空间复杂度。如:
http://blog.csdn.net/ebowtang/article/details/50687182
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: