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.
分析:This problem is more likely to be a (dynamic programming) DP problem,
where a[n][i] = a[n][i]+min(a[n-1][i], a[n-1][i-1]).
Note that in this problem, "adjacent" of a[i][j] means a[i-1][j] and a[i-1][j-1], if available(not out of bound), while a[i-1][j+1] is not "adjacent" element.
The minimum of the last line after computing is the final result.
class Solution { public: int minimumTotal(vector<vector<int> > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function int len = triangle.size(); for( int i = 1; i< len ; i++) for( int j = 0; j < triangle[i].size(); j++){ if(j == 0){ triangle[i][j] += triangle[i-1][j]; continue; } if(j == triangle[i].size() -1){ triangle[i][j] += triangle[i-1][j-1]; continue; } int val = triangle[i-1][j] < triangle[i-1][j-1] ? triangle[i-1][j] :triangle[i-1][j-1] ; triangle[i][j] += val; } int minval = triangle[len-1][0]; for(int i = 1 ; i< triangle[len-1].size() ; i++){ if(minval > triangle[len-1][i] ) minval = triangle[len-1][i]; } return minval; } };
reference :http://yucoding.blogspot.com/2013/04/leetcode-question-112-triangle.html