Dynamic Programming
Recursion:
class Solution {
public:
int getMin(vector<vector<int> > &triangle, int row, int column) {
if(row>triangle.size()-1) {
return 0;
}
int leftMin=getMin(triangle, row+1, column);
int rightMin=getMin(triangle, row+1, column+1);
int currentMin=leftMin<rightMin?leftMin:rightMin;
return triangle[row][column]+currentMin;
}
int minimumTotal(vector<vector<int> > &triangle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (triangle.size()==0) {
return 0;
}
return getMin(triangle, 0, 0);
}
};
Iteration:
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n=triangle.size();
if (n==0) {
return 0;
}
vector<int> min(triangle[n-1]);
for (int i=n-2; i>=0; i--) {
for(int j=0; j<triangle[i].size(); j++) {
if (min[j]<min[j+1]) {
min[j]=triangle[i][j]+min[j];
}else {
min[j]=triangle[i][j]+min[j+1];
}
}
}
return min[0];
}
};