LeetCode-動態規劃之Triangle
阿新 • • 發佈:2017-09-11
pre family add where throw to do 16px owin ext
題目描述
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).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
分析
- 從下到上。
- 我們從底行[size()- 2]上方的行開始。
- 每個數在其下面加上兩個數字較小的數字。
- 最後我們到最上面我們是最小的總和。
Java代碼
import java.util.List; public class Triangle { public int minimumTotal(List<List<Integer>> triangle) {int[] A = new int[triangle.size() + 1]; for (int i = triangle.size() - 1; i >= 0; i--) { for (int j = 0; j < triangle.get(i).size(); j++) { A[j] = Math.min(A[j], A[j + 1]) + triangle.get(i).get(j); } } return A[0]; } }
測試代碼:
package dynamicPlanning; import org.junit.Test; import java.util.ArrayList; import java.util.List; /** * Created by Feng on 2017/9/11. */ public class TriangleTest { Triangle triangle = new Triangle(); @Test public void minimumTotal() throws Exception { List<Integer> list1 = new ArrayList<>(); list1.add(2); List<Integer> list2 = new ArrayList<>(); list2.add(3); list2.add(4); List<Integer> list3 = new ArrayList<>(); list3.add(6); list3.add(5); list3.add(7); List<Integer> list4 = new ArrayList<>(); list4.add(4); list4.add(1); list4.add(8); list4.add(3); List<List<Integer>> lists = new ArrayList<>(); lists.add(list1); lists.add(list2); lists.add(list3); lists.add(list4); int result = triangle.minimumTotal(lists); //System.out.println(lists.size()); System.out.println(result); } }
LeetCode-動態規劃之Triangle