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 is11(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.
int minimumTotal(vector<vector<int> > &triangle) { int n = triangle.size(); int res = 1e8; if(n==1) { res = triangle[0][0]; } for(int i = 1; i < n;i++){ for(int j = 0;j <= i;j++){ if(j == 0){ triangle[i][j] = triangle[i][j]+triangle[i-1][j]; }else if(i == j){ triangle[i][j] = triangle[i][j]+triangle[i-1][j-1]; } else{ triangle[i][j] = triangle[i][j]+min(triangle[i-1][j],triangle[i-1][j-1]); } if(i == n-1){ res = min(res,triangle[i][j]); } } } return res; }
后退法:
int minimumTotal(vector<vector<int> > &triangle) { int n = triangle.size(); for(int i = n-2;i >= 0;i-- ){ for(int j = 0;j<=i;j++){ triangle[i][j] = triangle[i][j]+min(triangle[i+1][j],triangle[i+1][j+1]); } } return triangle[0][0]; }