【DP】Triangle

来源:互联网 发布:办公软件excel2007 编辑:程序博客网 时间:2024/05/22 09:48

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

解法:转化成矩阵,用d[i][j]表示(0,0)到(i,j)的最小和

public class Solution {    public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {        if(triangle == null) return 0;        int len = triangle.size();        if(len == 0 ) return 0;                int d[][] = new int[len][len];        for(int i=0; i<len; i++){            for(int j=0; j<i+1; j++){                int temp = triangle.get(i).get(j);                if(i==0 && j==0) d[i][j] = temp;                else if(j==0) d[i][j] = temp + d[i-1][j];                else if(i == j) d[i][j] = temp + d[i-1][j-1];                else{                    int v1 = temp + d[i-1][j];                    int v2 = temp + d[i-1][j-1];                    if(v1 < v2) d[i][j] = v1;                    else d[i][j] = v2;                }            }        }        Arrays.sort(d[len-1]);        return d[len-1][0];    }}

解法二:转化成o(n)空间,注意遍历j的方向从大到小,不然会产生覆盖

public class Solution {    public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {        if(triangle == null) return 0;        int len = triangle.size();        if(len == 0 ) return 0;                int d[] = new int[len];        for(int i=0; i<len; i++){            for(int j=i; j>=0; j--){//从大到小,防止覆盖                int temp = triangle.get(i).get(j);                if(i==0 && j==0) d[j] = temp;                else if(j==0) d[j] = temp + d[j];                else if(i == j) d[j] = temp + d[j-1];                else{                    int v1 = temp + d[j];                    int v2 = temp + d[j-1];                    if(v1 < v2) d[j] = v1;                    else d[j] = v2;                }            }        }        Arrays.sort(d);        return d[0];    }}



0 0
原创粉丝点击