• Leetcode-Triangle


    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

    For example, given the following triangle

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    

    The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

    Solution:

    public class Solution {
        public int minimumTotal(List<List<Integer>> triangle) {
            if (triangle.size()==0)
                return 0;
            
            if (triangle.size()==1){
                List<Integer> temp = triangle.get(0);
                return temp.get(0);
            }
            
            List<Integer> pre = new ArrayList<Integer>();
            List<Integer> cur = new ArrayList<Integer>();
            
            cur.add(triangle.get(0).get(0));
            for (int i=1;i<triangle.size();i++){
                pre = cur;
                cur = new ArrayList<Integer>();
                List<Integer> curTri = triangle.get(i);
                //j==0
                cur.add(curTri.get(0)+pre.get(0));
                //j==1 to (size()-2)
                for (int j=1;j<curTri.size()-1;j++)
                    if (pre.get(j-1)<pre.get(j))
                        cur.add(curTri.get(j)+pre.get(j-1));
                    else
                        cur.add(curTri.get(j)+pre.get(j));
                //j==size()-1
                int last = curTri.size()-1;
                cur.add(curTri.get(last)+pre.get(last-1));
            }
            
            int min = Integer.MAX_VALUE;
            for (int i=0;i<cur.size();i++)
                if (cur.get(i)<min)
                    min = cur.get(i);
                    
            return min;
        }
    }

    This is a DP problem. At each point, the min path = min(min path to its left adjacent in higher level, min path to its right adjacent in higher level)+its value.

    Just be careful when addressing boundary points.

  • 相关阅读:
    day7_subprocess模块和面向对象,反射
    python学习之day6,常用标准模块
    python学习之day5,装饰器,生成器,迭代器,json,pickle
    python学习笔记2(pycharm、数据类型)
    Python 学习笔记1
    Python 学习之进制与编码
    网络协议
    Python学习之Python简介
    计算机发展历史
    Java接口
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4082710.html
Copyright © 2020-2023  润新知