给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11
(即,2 + 3 + 5 + 1 = 11)。
1.自顶向下+备忘录法
对于每一个节点,递归地求出他(左右两个孩子的值+自身节点值)最小的那一个记为tmp,并保存在辅助数组res中,以供下一次计算同一节点值时使用,这样做可以避免大量的重复计算,但是需要O(m*n)的额外空间。
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m=triangle.size();
int n=triangle[m-1].size();
vector<vector<int> >res(m,vector<int>(n,INT_MAX));
return minimumTotal(triangle,res,0,0);
}
int minimumTotal(vector<vector<int>>& triangle,vector<vector<int>>