三角形最小路径和(经典dp)

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
    int height = triangle.size(),width=0;
    int [][]dp = new int[height][];
    for(int i=0;i<height;i++)
        dp[i]=new int[i+1];
    dp[0][0]=triangle.get(0).get(0);
    for(int i=1;i<height;i++){
      List<Integer> list= triangle.get(i);
      width=list.size();
      for(int j=0;j<width;j++){
          if(j==0){
          dp[i][j]=dp[i-1][j]+list.get(j);
          }else if(j==width-1){
            dp[i][j]=dp[i-1][j-1]+list.get(j);
          }else{
              dp[i][j]=Math.min(dp[i-1][j],dp[i-1][j-1])+list.get(j);
          }   
      }
    } 

      Arrays.sort(dp[height-1]);
      return dp[height-1][0];
    }
}

posted @ 2020-07-14 10:28  浅滩浅  阅读(177)  评论(0编辑  收藏  举报