Friday, January 31, 2014

Leetcode: triangle

public class Solution {
    public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
        int n1=triangle.size();
        int n2=triangle.get(n1-1).size();
        int[] sum=new int[n1+1];



// Bottom Up

        for(int i=n1;i>0;i--)
        {
            int[] newsum=new int[n1+1];
            for(int j=0;j<i;j++)
            {
                int ans1=sum[j];
                int ans2=sum[j+1];
                int ans=(ans1<ans2)?ans1:ans2;
                newsum[j]=triangle.get(i-1).get(j)+ans;
            }
            sum=newsum;
        }
        return sum[0];

// Top down
/*      
        for(int i=0;i<n1;i++)
        {
            int[] newsum=new int[n2];
            for(int j=0;j<=i;j++)
            {
                int x=triangle.get(i).get(j);
                int ans1=sum[j]+x;
                int ans2=Integer.MAX_VALUE;

                if(j>0)ans2=sum[j-1]+x;
               
                if(j==0)newsum[j]=ans1;
                else if(j==i)newsum[j]=ans2;
                else newsum[j]=(ans1<ans2)?ans1:ans2;
            }
            sum=newsum;
        }

        int m=Integer.MAX_VALUE;
        for(int i=0;i<n2;i++)
            if(sum[i]<m)m=sum[i];
           
        return m;
 */

    }
}

No comments:

Post a Comment