标签:
标题: | Triangle |
通过率: | 27.1% |
难度: | 中等 |
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.
动态规划题目,自底向上,最小和一定是每行的最小值,那么从下面开始向上合并,公式就是 res[i][j]=res[i+1][j]+res[i+1][j+1]
公式解释从最后一行开始,每次挑选j 和j+1的较小值加上上一行的j 赋值给j,依次类推
1 public class Solution { 2 public int minimumTotal(List<List<Integer>> triangle) { 3 if(triangle.size()==1)return triangle.get(0).get(0); 4 int [] res=new int[triangle.size()]; 5 for(int i=0;i<triangle.size();i++){ 6 res[i]=triangle.get(triangle.size()-1).get(i); 7 } 8 for(int i=triangle.size()-2;i>=0;i--){ 9 for(int j=0;j<triangle.get(i).size();j++){ 10 res[j]=Math.min(res[j],res[j+1])+triangle.get(i).get(j); 11 } 12 } 13 return res[0]; 14 } 15 }
标签:
原文地址:http://www.cnblogs.com/pkuYang/p/4378941.html