leetcode 120. Triangle

leetcode 120. 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).

 

 

动态规划,dp[i][j]表示第i行第j列元素到起点的最短路径。那么

 dp[i][j]=triangle.get(i).get(j)+Math.min(dp[i-1][j-1],dp[i-1][j]);
要主要特殊值:每一行最开始和最后元素。

 

 

public class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        if (triangle.size()==0){
            return 0;
        }
        Integer[][] dp=new Integer[triangle.size()][];
        for (int i=0;i<triangle.size();i++){
            dp[i]=new Integer[triangle.get(i).size()];
        }
        dp[0][0]=triangle.get(0).get(0);
        for (int i=1;i<triangle.size();i++){
            for (int j=0;j<triangle.get(i).size();j++){
                if (j==0){
                    dp[i][j]=triangle.get(i).get(j)+dp[i-1][j];
                }else if (j==i){
                    dp[i][j]=triangle.get(i).get(j)+dp[i-1][j-1];
                }else {
                    dp[i][j]=triangle.get(i).get(j)+Math.min(dp[i-1][j-1],dp[i-1][j]);
                }
            }
        }
        int len=dp[dp.length-1].length;
        int min=dp[dp.length-1][0];
        for (int i=1;i<len;i++){
            if (min>dp[len-1][i]){
                min=dp[len-1][i];
            }
        }
        return min;
    }
}

 

posted on 2017-07-06 10:09  sure0328  阅读(90)  评论(0)    收藏  举报

导航