您的位置:首页 > 其它

leetcode:Triangle

2015-11-10 15:07 330 查看

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).
Note:

Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

Subscribe to see which com
用递归超时,通不过。
迭代-动态规划:
1.从上往下遍历 :求每一层,到每个位置的路径最小值,下一层的每个位置的路径最小值只与前一层的某一条(第一个位置和最后一个位置)或者两条路径相关。即通过求前一阶段(每个位置)的最优解推出下一阶段(每个位置)的最优解

class Solution {
public:
/*int dfs(vector<vector<int>>& triangle,int index,int level){
if(level>=triangle.size())
return 0;
if(index+1>=triangle[level].size())
return triangle[level][index]+dfs(triangle,index,level+1);
return min(triangle[level][index]+dfs(triangle,index,level+1),triangle[level][index+1]+dfs(triangle,index+1,level+1));
}
*/

int minimumTotal(vector<vector<int>>& triangle) {
//return dfs(triangle,0,0);//超时
if(triangle.size()<=0)
return 0;
int ret=INT_MAX;
vector<vector<int>> flg=triangle;
int level=1;
for(;level<triangle.size();level++){
for(int index=0;index<triangle[level].size();index++){
if(index==0)
flg[level][index]=triangle[level][index]+flg[level-1][index];
else if(index==triangle[level].size()-1)
flg[level][index]=triangle[level][index]+flg[level-1][index-1];
else
flg[level][index]=triangle[level][index]+min(flg[level-1][index-1],flg[level-1][index]);
}
}
level--;
for(int index=0;index<flg[level].size();index++){
ret=ret>flg[level][index]?flg[level][index]:ret;
}
return ret;

}
};


2.从下往上遍历,思路差不多,但是不需要考虑第一个和最后一个位置只有一条路径的情况

参考:http://www.tuicool.com/articles/i22yam

int minimumTotal(vector<vector<int>>& triangle) {
//return dfs(triangle,0,0);//超时
if(triangle.size()<=0)
return 0;
vector<vector<int>> flg=triangle;
int level=triangle.size()-2;
for(;level>=0;level--){
for(int index=0;index<triangle[level].size();index++){
flg[level][index]=triangle[level][index]+min(flg[level+1][index+1],flg[level+1][index]);
}
}
return flg[0][0];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: