LeetCode-动态规划之Triangle
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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).
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的主要内容,如果未能解决你的问题,请参考以下文章