LeetCode 120 三角形最小路径和
题目
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
-
说明
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
我的代码
class Solution {
public:
int minNum(int a, int b){
return a > b ? b : a;
}
int minimumTotal(vector<vector<int>>& triangle) {
int i=0,j=0;
int a=0,b=0;
vector<int> triang(triangle.size(),0);
triang[0] = triangle[0][0];
for(i=1;i<triangle.size();i++){
triang[i] = triang[i-1] + triangle[i][i];
for(j=triangle[i].size()-2; j>=1; j--){
triang[j] = minNum(triang[j], triang[j-1]) + triangle[i][j];
}
triang[0] += triangle[i][0];
}
int mini = 100000;
for(i=0;i<triang.size();i++){
if(triang[i] < mini){
mini = triang[i];
}
}
return mini;
}
};
解题思路
- triangle为给定的储存三角形的二维vector,各行长度为1,3,5,7...2n-1
- triang为一维数组,存储当前"走到"每一行的状态
- triang初始化为第一行的状态,而后每走一行,根据triang与当前行更新triang
- 每一行从后往前更新triang数组。
minNum函数
用于返回两数中小值