https://oj.leetcode.com/problems/triangle/
1、题目要求:给定一个三角形,找到从顶层到底层的最小路径和。每一步只能移动到下一层的相邻元素。
例:[
[2]
[3, 4]
[6, 5, 7]
[4, 1, 8, 3]
]
其从顶层到底层的最小路径和是11。(2+3+5+1=11)
2、解题思路:
1、一种很直观的思路是,从上到下,依次将上一层的数加到下一层的,最后找出底层里面的最小值;
注:每一层首尾的元素只能 加上 其上一层对应的首尾元素;
每一层中间的元素,选择上一层相邻元素中较小的值相加;
<span style="font-size:18px;">class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
int line = triangle.size();
if (line== 0)
return -1;
if (line== 1)
return triangle[0][0];
for (int i= 1; i!= line; i++)
{
int row= triangle[i].size();
for (int j= 0; j!= row; j++)
{
//处理每一层的第一元素
if (j == 0)
triangle[i][j]+= triangle[i-1][j];
//处理每一层的最后一个元素
else if (j == row - 1)
triangle[i][j]+= triangle[i-1][j-1];
//处理每一层的中间元素,选择上一层相邻元素中较小的值相加
else
triangle[i][j]+= triangle[i-1][j-1]< triangle[i-1][j]? triangle[i-1][j-1]: triangle[i-1][j];
}
}
int result = triangle[line - 1][0];
for (int k= 0; k != triangle[line-1].size(); k++)
{
result= triangle[line-1][k]<result? triangle[line-1][k]: result;
}
return result;
}
};