120.Triangle
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
一、空间复杂度O(n^2)
一共有n行,那么所占空间为n*(n+1)/2的一维数组,从上往下填表,由于下一个值的得出需要上一个值,所以从上往下填表需要设置两个临时变量进行倒换,比较麻烦;且从上往下填表的最终结果需要在最底行中找最小值。
二、空间复杂度O(n)
填表是一个双重循环,在内循环中,值的得出依赖于前i个数,i最大为n,所以我们只需要重复利用O(n)空间就可以完成双循环。
三、从下往上填表
不需要设置两个变量倒换,可以直接覆盖之前的值;且最后的结果输出DP[0]即可。
public class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int row = triangle.size();
int[] DP = new int[row];
for(int i = 0; i < row; i++) {
DP[i] = triangle.get(row-1).get(i);
}
for(int i = row - 2; i >= 0; i--) {
for(int j = 0; j <= i; j++) {
DP[j] = Math.min(DP[j], DP[j+1]) + triangle.get(i).get(j);
}
}
return DP[0];
}
}