- 结果
- 分析
下面代码是一个破坏性算法,但是可以使空间复杂度达到O(1)。思路很简单,是一个简单的动态规划。
- 代码
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m = triangle.size();
if(m == 0)
return 0;
int i,j;
int min = 0x7fffffff;
for(i = 0; i < m; i++){
for(j = 0; j <= i; j++){
if(i != 0){//处理不是第1行的时候
if(j == 0)//处理第一列
triangle[i][j] = triangle[i - 1][j] + triangle[i][j];
else if(i == j)//处理对角线
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i][j];
else{
if(triangle[i - 1][j] < triangle[i - 1][j - 1])
triangle[i][j] = triangle[i - 1][j] + triangle[i][j];
else
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i][j];
}
}
if(i == m - 1 && min > triangle[m - 1][j]) min = triangle[m - 1][j];
}
}
return min;
}
};