leetcode--Triangle

来源:互联网 发布:vb.net app.path 编辑:程序博客网 时间:2024/06/05 23:39

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]

重复上述过程即可。

[java] view plain copy
  1. public class Solution {  
  2.     public int minimumTotal(List<List<Integer>> triangle) {  
  3.         int size = triangle.size();  
  4.         while(size>1){  
  5.             List<Integer> last = triangle.remove(size-1);//当前层  
  6.             size--;  
  7.             List<Integer> pre = triangle.get(size-1);//上一层  
  8.             int i = last.size()-1;  
  9.             while(i>0){//遍历当前层  
  10.                 pre.set(i-1, pre.get(i-1)+Math.min(last.get(i),last.get(i-1)));//更新上一层  
  11.                 i--;  
  12.             }             
  13.         }         
  14.         return triangle.get(0).get(0);  
  15.     }  

原文链接http://blog.csdn.net/crazy__chen/article/details/46494431