leetcode--Triangle

来源:互联网 发布:淘宝2017销售额下滑 编辑:程序博客网 时间:2024/05/16 17:05

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, wheren is the total number of rows in the triangle.


题意:给定一个三角形,找到从顶到底的最小路径。每次你都只能向下移动。

分类:动态规划,数组


解法1:动态规划。从底向上,对于每个元素,有左右两个选择,我们选择一个小的,更新自己的值就可以了。

重复执行一直到顶部。

例如图中,对于{6,5,7}这一行,

对于6而言,选择1会使路径比较小,

对于5而言,选择1会使路径比较小,

对于7而言,选择3会使路径比较小

那么我们就更新这一层,使这一层变成{7,6,10}

那么现在三角形就是

     [2]

   [3,4]

[7,6,10]

重复上述过程即可。

public class Solution {    public int minimumTotal(List<List<Integer>> triangle) {        int size = triangle.size();while(size>1){List<Integer> last = triangle.remove(size-1);//当前层size--;List<Integer> pre = triangle.get(size-1);//上一层int i = last.size()-1;while(i>0){//遍历当前层pre.set(i-1, pre.get(i-1)+Math.min(last.get(i),last.get(i-1)));//更新上一层i--;}}return triangle.get(0).get(0);    }}


0 0
原创粉丝点击