Saturday, September 20, 2014

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


   typedef vector<vector<int> > vvi;  
   typedef vector<int> vi;  
   #define INT_MAX 0x7FFFFFFF

int minimumTotal(vector<vector<int> > &triangle) { int n = triangle.size(); if(n==1)return triangle[0][0]; vi v(n,0); for (int i = 0; i <n; i++) { v[i] = triangle[n-1][i]; } for (int i = n-2; i>=0; i--) { for(int j = 0; j <= i; j++) { v[j] = triangle[i][j] + min(v[j], v[j+1]); } } return v[0]; }

No comments:

Post a Comment