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.

 

 1 class Solution{
 2 public:
 3     int minimumTotal(vector<vector<int> > &triangle){
 4         int n=triangle.size();
 5         if(n==0) return 0;
 6 
 7         int *sum=new int[n+1];
 8 
 9         sum[0]=triangle[0][0];
10 
11         for(int i=1;i<n;i++)
12         {
13             sum[i]=sum[i-1]+triangle[i][i];
14             for(int j=i-1;j>0;j--)
15                 sum[j]=min(sum[j],sum[j-1])+triangle[i][j];
16             sum[0]=sum[0]+triangle[i][0];
17         }
18 
19         int min=INT_MAX;
20         for(int i=0;i<n;i++)
21             if(sum[i]<min)
22                 min=sum[i];
23 
24         return min;
25     }
26 };

 

posted on 2015-05-19 16:56  黄瓜小肥皂  阅读(138)  评论(0编辑  收藏  举报