LeetCode: Triangle

本文介绍了一种使用动态规划算法解决三角形最小路径和问题的方法,通过自顶向下累加的方式,实现最优路径查找。文章详细阐述了算法步骤,并提供了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:自顶向下依次累加,简单的动态规划算法。第i层的第j列元素只考虑第i-1层第j 和 第 j-1列元素(如果存在),注意数组不要越界。为了节省空间,可以只记录两层的最小和,当前层和前一层,但是会消耗一些时间。

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
		int layer = triangle.size();
		int *f = new int[layer], *pre = new int[layer];
		for(int i = 0;i<layer;i++){
			if(0 == i) {pre[0] = f[0] = triangle[0][0];}
			else{
				for(int j = 0;j<=i;j++){
					if(0==j) 
						f[j] = pre[j] + triangle[i][j];
					else if(j == i) 
						f[j] = pre[j-1] + triangle[i][j];
					else
						f[j] = min(pre[j],pre[j-1]) + triangle[i][j];
				}
				
				for(int j=0;j<=i;j++)
					pre[j] = f[j];
			}
		}
		int min_v = INT_MAX;
		for(int i=0;i<layer;i++)
			min_v = min(min_v,f[i]);
		return min_v;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值