LeetCode 120 三角形最小路径和 c语言实现 动态规划

原题地址:三角形最小路径和 - 力扣
题目描述
首先分析这道题。
这些数字是放在一个叫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];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值