package leetcode; import java.util.ArrayList; import java.util.List; public class demo_120 { //动态规划 public int minimumTotal(List<List<Integer>> triangle) { int sum; int[][] dp=new int[triangle.size()][triangle.get(triangle.size()-1).size()]; dp[0][0]=triangle.get(0).get(0); for(int i=1;i<dp.length;i++) { for(int j=0;j<=triangle.get(i-1).size();j++) { if(j==0) { dp[i][j]=dp[i-1][j]+triangle.get(i).get(j); continue; } if(j==triangle.get(i-1).size()) { dp[i][j]=dp[i-1][j-1]+triangle.get(i).get(j); continue; } dp[i][j]=Math.min(dp[i-1][j], dp[i-1][j-1])+triangle.get(i).get(j); } } sum=dp[dp.length-1][0]; //求出最后一层的最小值即是最终结果 for(int i=1;i<dp[dp.length-1].length;i++) { if(sum>dp[dp.length-1][i]) { sum=dp[dp.length-1][i]; } } System.out.println(sum); return sum; } public static void main(String[] args) { // TODO Auto-generated method stub List<List<Integer>> triangle=new ArrayList<List<Integer>>(); demo_120 d120=new demo_120(); List<Integer> l1=new ArrayList<Integer>(); l1.add(2); List<Integer> l2=new ArrayList<Integer>(); l2.add(3);l2.add(4); List<Integer> l3=new ArrayList<Integer>(); l3.add(6);l3.add(5);l3.add(7); List<Integer> l4=new ArrayList<Integer>(); l4.add(4);l4.add(1);l4.add(8);l4.add(3); triangle.add(l1); triangle.add(l2); triangle.add(l3); triangle.add(l4); d120.minimumTotal(triangle); } }