首页 > 代码库 > Leetcode-Triangle

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.

Leetcode-Triangle