原题地址:三角形最小路径和 - 力扣
首先分析这道题。
这些数字是放在一个叫triangle的二维函数里面,然后一共有riangleSize层,然后每层的长度与层数一样。而且 triangle[j][m] 只能加 triangle[j+1][m] 或t riangle[j+1][m+1];
我采用的方法是从下加到上的方法来的,假设前面每一层已经选好了合适的数字,接下来要选择它下一行中能选择的数字中的最佳数字。
首先从倒数第二行判断(以题目所给的数据为例子):
triangle[2][0] 可以加 triangle[3][0] 或 triangle[3][1];而此时我们假设前面已经决定故,只需判断该位置该加谁为最佳,由于1<4故我们选择 triangle[3][1]为最佳结果 ,6 + 1 = 7。
同理推导,第3行加上最佳的最后一步后分别为 7, 6, 10;
然后我们再来判断第二行加上第三行什么时候最佳(由于我们已经确定好了选择第三行后如何选择第四行,故直接原数组的第二行加上经过加了第四行的新的第三行即可【7, 6, 10】。
第二行判断后,得到【9, 10】;
同理 第一行判断后为 2 + 9 = 11;
故返回第一个数,结果为11;
AC代码
int minimumTotal(int** triangle, int triangleSize, int* triangleColSize){
int j, m;
for(j = triangleSize - 2; j >= 0; j--){
for( m = 0; m <= j; m++){
triangle[j][m] += triangle[j + 1][m] < triangle[j + 1][m + 1] ? triangle[j + 1][m] : triangle[j + 1][m + 1];
}
}
return triangle[0][0];
}