给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
解题思路:
动态规划:
建立一个一维数组,初始化为最底层值,依次向上构建一维数组,每遍历完一层得到的一维数组是,当前层到底层的最小值
//利用一位数组保存,防止改变原来的结构,利用从底倒上依次构建
//每一层得值为当前层值加上下一层的最小值,最后为顶层节点加上下面层数的路径最小值
public static int minimumTotal1(List<List<Integer>> triangle) {
int[] A = new int[triangle.size()+1];
for(int i=triangle.size()-1;i>=0;i--){
for(int j=0;j<triangle.get(i).size();j++){
A[j] = Math.min(A[j],A[j+1])+triangle.get(i).get(j);
}
}
return A[0];
}