LeetCode Triangle 三角形(最短路)

时间:2023-03-09 15:48:13
LeetCode Triangle 三角形(最短路)

题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路。

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

  注意:这里可以2->3>5>1,也可以2->4>5->1,隔层相邻就可以走。

思路:可以从下往上走,也可以从上往下走。都是O(n)的空间,平方阶的复杂度。

  从下往上可能更简洁,因为比较到最后只有一个元素,就是为答案了,速度自然也就快,每遍历一层就有1个被淘汰。

  然而我一开始想到的是从上往下,以为会很简单,结果就这样了。记得从右往左扫,不然会覆盖掉之前记录的那些值。

 class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.empty() || triangle[].empty() ) return ; vector<int> path( triangle.size() , );
path[]=triangle[][]; for(int i=; i<triangle.size(); i++)
{
path[ i ]=path[i-]+triangle[i][i];
for( int j=triangle[i].size()- ; j>; j--) //注意从后扫,不然会覆盖到前面
path[j]=triangle[i][j] + min( path[j-] , path[j] );
path[]+=triangle[i][];//因此这个要摆在最后
} return *min_element(path.begin(),path.end());
}
};

AC代码