[ 题目描述 ]:

[思路 ]:
- 题目要求求一条自顶向下的最小路径和
- 如果从上往下,每次选择最小的路径的话,会错过先大后更小这种情况,主要是因为贪心只能看到当前最好的情况,看不到其他的情况,层次越深,情况越多
- 但如果每层都的每个元素加上上面对应两个位置中最小的那个元素,遍历到最后一层,再从最后一层的结果中,选取最小的那个,就是最小路径和
- 那么反过来,自底向上,每次也选择最小的相加,那么便可以省去找最小值的步骤
- 运行如下

int minimumTotal(int** triangle, int triangleSize, int* triangleColSize) {
for(int i=triangleSize-2;i>=0;i--){
for(int j=0;j<triangleColSize[i];j++){
triangle[i][j]+=fmin(triangle[i+1][j],triangle[i+1][j+1]);
}
}
return triangle[0][0];
}
[ 官方题解 ]:
- 方法一:动态规划,主要通过额外的存储空间去存储移动后状态
- 方法二:动态规划 + 空间优化


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



