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).
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int totalrow=triangle.size();
int totalcolumn=triangle.at(totalrow-1).size();
if(totalrow <= 0 || totalcolumn!=totalrow)
return -1;
vector<vector<int>> pathsum;
for(int i=0;i<totalrow;i++)
{
vector<int> rowvec(totalcolumn,-1);
if(i==totalrow-1)
{
for(int j=0;j<totalcolumn;j++)
rowvec.at(j)=triangle.at(i).at(j);
}
pathsum.push_back(rowvec);
}
for(int i=totalrow-2;i>=0;i--)
{
for(int j=0;j<triangle.at(i).size();j++)
{
pathsum.at(i).at(j)=triangle.at(i).at(j)+min(pathsum.at(i+1).at(j),pathsum.at(i+1).at(j+1));
}
}
return pathsum.at(0).at(0);
}
};