码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode120

时间:2020-07-14 18:24:32      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:get   ++i   turn   minimum   new   leetcode   三角形   public   移动   

三角形最小路径
链接:三角形最小路径和

//设 d[i][j]为[0,0]到[i,j]的最短路径
/*由于每一步只能移动到下一行「相邻的节点」上,
因此要想走到位置 (i, j)(i,j),上一步就只能在位置 (i - 1, j - 1)(i?1,j?1) 或者位置 (i - 1, j)(i?1,j)。
我们在这两个位置中选择一个路径和较小的来进行转移,状态转移方程为:
f[i][j] =min(f[i-1][j-1], f[i-1][j]) + c[i][j]
*/
class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {      
       int[][] d=new int[triangle.size()+1][triangle.get(triangle.size()-1).size()+1];
        d[0][0]=triangle.get(0).get(0);         
        for(int i=1;i<triangle.size();i++){           
            for(int j=0;j<triangle.get(i).size();j++){  
            //三角形左边的状态转移方程
                if(j==0){
                    d[i][j]=d[i-1][j]+triangle.get(i).get(j);
                }
            //右边的
              else  if(j==triangle.get(i).size()-1){
                    d[i][j]=d[i-1][j-1]+triangle.get(i).get(j);
                }
              //中间部分
                else{
                    d[i][j]=Math.min(d[i-1][j],d[i-1][j-1])+triangle.get(i).get(j);
            }      
            }
        }
//找出最后一层最小的数即为最短路径
  int min = d[triangle.size() - 1][0];
        for (int i = 1; i < triangle.size(); ++i) {
            min = Math.min(min, d[triangle.size() - 1][i]);
        }
        return min;
    }
}

leetcode120

标签:get   ++i   turn   minimum   new   leetcode   三角形   public   移动   

原文地址:https://www.cnblogs.com/kotonoha/p/13300230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!