您的位置:首页 > 其它

Leetcode Triangle

2015-12-30 15:53 246 查看
/*
意思就是:

给定一个三角形。求得和最小的路径。每层仅仅能选一个整数,上一层和下一层的整数必须是相邻的。

思路:

1,动态规划。到第i层的第k个顶点的最小路径长度表示为f(i,k)。则f(i, k) = min{f(i-1,k),  f(i-1,k-1)} + d(i, k); 当中d(i, k)表示原来三角形数组里  的第i行第k列的元素。则能够求得从第一行到终于到第length-1行第k个元素的最小路径长度。最后再比較第length-1行中全部元素的路径长度大小。求得最小值。

2,本题主要关心的是空间复杂度不要超过n。
3,注意边界条件——每一行中的第一和最后一个元素在上一行中仅仅有一个邻居。

而其它中间的元素在上一行中都有两个相邻元素。

演示样例:
初始 triangle
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
程序执行之后的triangle
[
[2],
[5,6],
[11,10,13],
[15,11,18,16]
]
*/

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

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