Problem:
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.
Analysis:
Solution:
C++:
int minimumTotal(vector<vector<int> > &triangle)
{
if(triangle.size() == 0)
return 0;
vector<int> tempSumVec = triangle[triangle.size() - 1];
for(int row = triangle.size() - 2; row >= 0; --row) {
for(int col = 0; col < triangle[row].size(); ++col) {
int leftSum = triangle[row][col] + tempSumVec[col];
int rightSum = triangle[row][col] + tempSumVec[col + 1];
if(leftSum < rightSum)
tempSumVec[col] = leftSum;
else
tempSumVec[col] = rightSum;
}
tempSumVec.erase(tempSumVec.end() - 1);
}
return tempSumVec[0];
}
Java:
Python: