LeetCode 120. Triangle

本文介绍了一种解决三角形最小路径和问题的高效算法,采用逆向思维从底部向上逐步计算最小路径总和,最终得出顶部到底部的最短路径长度。此方法仅使用O(n)额外空间。

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

  • 描述
    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
    For example, given the following triangle
[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

  • 注意点
    题目的意思是索引只能向前移动1,不能向后移动。换句话说,即可以不移动索引或者索引+1。
  • 思路
    可以考虑逆推的方式进行求解。看例子中的最后两行,倒数第二行中,6可以跟4或1进行组合,5可以跟1或8进行组合,7可以跟8或3组合,而这种组合可以确定只能跟可以选择的最小数字进行组合,即6只能跟1进行组合,5只能跟1进行组合,7只能跟3进行组合, 将组合后的数字重新赋值给倒数第二行 ,这样,即可删除最后一行,继续向前遍历。可以重复的进行“删行”,直到该行只有1个元素,就得到了最终的结果。由于每次的元素都保存在原集合中,故空间复杂度为常量C,符合题意。
  • 代码(c#)
 public int MinimumTotal(IList<IList<int>> triangle)
        {
            for (int i = triangle.Count-2; i>-1 ; i--)
            {
                for (int j = 0; j < triangle[i].Count; j++)
                {
                    triangle[i][j] += Math.Min(triangle[i+1][j], triangle[i+1][j+1]);//选出最小的可组合项
                }
            }
            return triangle[0][0];
        }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值