动态规划
1.先定义dp数组在下标i和下标j时的最小路径和 ,之后初始化dp数组值dp【0】【0】=triangle.get(0).get(0)。再用for循环来遍历数组dp【】的i,并赋值每行的下标为0的dp数组。之后再用for循环遍历dp【i】【】的j,递推公式来计算dp【i】【j】=Math.min(dp[i-1][j],dp[i-1][j-1])+triangle.get(i).get(j)。赋值每行的下标为triangle.get(i).size()-1的dp数组。在定义一个变量来进行接收最小路径和,之后再遍历dp数组的最后一行来进行更新接受最小路径的值。
class Solution {public int minimumTotal(List<List<Integer>> triangle) {//定义在下标i和下标j时的最小路劲和int [][] dp=new int [triangle.size()][triangle.size()];//初始化dp数组dp[0][0]=triangle.get(0).get(0);//for循环遍历数组dp【】的ifor(int i=1;i<triangle.size();i++){//赋值每行的下标为0的dp数组dp[i][0]=dp[i-1][0]+triangle.get(i).get(0);//for循环遍历dp【i】【】的jfor(int j=1;j<triangle.get(i).size()-1;j++){//递推公式来计算dp【】【】dp[i][j]=Math.min(dp[i-1][j],dp[i-1][j-1])+triangle.get(i).get(j);}//赋值每行的下标为triangle.get(i).size()-1的dp数组dp[i][triangle.get(i).size()-1]=dp[i-1][triangle.get(i-1).size()-1]+triangle.get(i).get(triangle.get(i).size()-1);}//用来接收最小路径和int minshu=Integer.MAX_VALUE;//遍历dp数组的最后一行来找到最小的路径和for(int i=0;i<triangle.get(triangle.size()-1).size();i++){minshu=Math.min(dp[triangle.size()-1][i],minshu);}return minshu;}
}