思路:
时间复杂度O(N*N),空间复杂度O(1)。
刚开始理解错了,每往下走一行,只能往下面或者往下面的前面走,不能往下面的后面走。
Example:
row0:2
row1:3 4
row2:6 5 7
row3:1 2 8 3
5只能选2 或者 8,而不能选1。
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
if(triangle.size() == 0) return 0;
for(int i = triangle.size() - 2; i >= 0; --i) {
for(int j = 0; j < i + 1; ++j) {
triangle[i][j] = min(triangle[i+1][j], triangle[i+1][j+1]) + triangle[i][j];
}
}
return triangle[0][0];
}
};