这个应该是一个典型的dp问题,用一个和输入相同的二维数组进行到达此节点时的最小路径。
注意两个在每一行的边界条件。以及row<=2时的处理,否则容易overflow.
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
vector<vector<int>> res = triangle;
int row(triangle.size());
if(row <=1) return triangle[0][0];
res[1][0] = res[1][0] + triangle[0][0];
res[1][1] = res[1][1] + triangle[0][0];
if(row <=2) return min(res[1][0], res[1][1]);
for(int i = 2; i < triangle.size(); i++){
for(int j = 0; j < triangle[i].size(); j++){
//cout << "i is:" << i << " j is:" << j <<endl;
if(j == 0 ){
res[i][j] = res[i-1][j] + triangle[i][j];
}
else if(j == triangle[i].size()-1){
res[i][j] = res[i-1][j-1] + triangle[i][j];
}
else{
res[i][j] = min(res[i-1][j], res[i-1][j-1]) + triangle[i][j];
}
}
}
int res_all = *min_element(res[row-1].begin(), res[row-1].end());
return res_all;
}
};
本文探讨了在给定的三角形数组中寻找从顶部到底部的最小路径和的算法。通过动态规划的方法,利用一个二维数组记录到达每个节点时的最小路径,特别关注了边界条件和行数小于等于2的情况,避免溢出问题。
1125

被折叠的 条评论
为什么被折叠?



