当前位置:首页 > 力扣 > LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

15小时前

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现 120题 三角形最小路径和 动态规划 自底向上递推 状态转移方程 第1张

一、题目解读

LeetCode 120题三角形最小路径和”要求给定一个由数字组成的三角形,从顶部开始向下移动,每次可向左或向右移动一格,计算从顶至底的最小路径和。三角形以二维向量形式给出,每层元素数量递增,需找到所有可行路径中的最小值。该问题属于经典的动态规划应用场景,需通过合理设计状态转移方程来求解。

二、解题思路

采用动态规划策略,核心思想是自底向上递推。从三角形倒数第二层开始,逐层向上计算每个节点的最小路径和。关键在于利用下一层相邻节点的最小值,通过状态转移方程更新当前节点的值,最终得到顶点的最小路径和。该解法避免了暴力枚举所有路径,时间复杂度优化至O(n^2)(n为层数)。

三、解题步骤

1. 初始化:获取三角形层数n,确定递推起点为倒数第二层(i=n-2)。

2. 外层循环:从n-2到0层,逐层向上递推。

3. 内层循环:遍历当前层每个节点(0≤j≤i)。

4. 状态转移:当前节点的最小路径和 = 当前值 + 下一层相邻两个节点的较小值(即min(triangle[i+1][j], triangle[i+1][j+1]))。

5. 结果返回:最终顶层节点triangle[0][0]即为最小路径和。

四、代码与注释

#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int n = triangle.size();  // 获取层数
        // 从倒数第二层开始向上递推
        for (int i = n - 2; i >= 0; --i) {
            for (int j = 0; j <= i; ++j) {
                // 当前节点的最小路径和 = 当前值 + 下一层相邻两个节点的较小值
                triangle[i][j] += min(triangle[i+1][j], triangle[i+1][j+1]);
            }
        }
        return triangle[0][0];  // 返回顶点的最小路径和
    }
};

代码特点:

● 原地修改三角形数组,节省空间复杂度(O(1))。

● 利用min函数简化相邻节点比较,提升代码可读性。

五、总结

动态规划是解决此类路径优化问题的关键,需明确状态定义(每层节点的最小路径和)与转移方程。自底向上的递推方式避免了递归开销,且通过原地修改数组进一步优化资源消耗。在实际应用中,该思路可扩展至其他形路径问题,为算法设计提供通用框架。


原创内容 转载请注明出处

分享给朋友:

相关文章

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

题目解读‌斐波那契数列是一个经典的数学问题,在计算机科学中常被用作算法教学的入门案例。这个神奇的数列从0和1开始,后续每个数字都是前两个数字之和。题目要求我们计算第n个斐波那契数,看似简单的问题背后却...

CSP-J 2019纪念品题解(洛谷P5662):动态规划+完全背包问题的实战应用

CSP-J 2019纪念品题解(洛谷P5662):动态规划+完全背包问题的实战应用

一、题目解读2019年CSP-J的“纪念品”问题(对应洛谷P5662)要求玩家在T天内通过买卖纪念品最大化金币收益。每天可交易N种商品,需计算最优策略下的最终金币数。题目强调动态规划思维与资源分配优化...

CSP-J方格取数题解|动态规划解法|洛谷P7074代码解析

CSP-J方格取数题解|动态规划解法|洛谷P7074代码解析

一、题目解读题目要求在一个n×m的网格中,从左上角到右下角选择一条路径,路径上的数字可重复取用,求取数之和的最大值。路径限制为仅能向右或向下移动。需注意路径的灵活性与重复取数的可能性,传统单向动态规划...

牛客12576题解题全解析:动态规划+质因数分解实现跳跃问题最优解

牛客12576题解题全解析:动态规划+质因数分解实现跳跃问题最优解

一、题目解读牛客12576题是一道经典的算法题,要求给定起点N和终点M,求解从N到M的最少跳跃次数。题目考察的核心在于路径优化与动态规划思想,需结合数论中的质因数分解技巧,通过合理设计算法降低时间复杂...

NOIP 2008火柴棒等式题解(C++代码实现)  动态规划与枚举算法详解

NOIP 2008火柴棒等式题解(C++代码实现) 动态规划与枚举算法详解

一、题目解读火柴棒等式问题(NOIP 2008,洛谷P1149)要求使用给定数量的火柴棒,构造形如 A + B = C 的等式,其中A、B、C均为整数,且火柴棒总数恰好等于输入值。需统计符合条件的等式...

2024蓝桥杯省赛B组“传送阵”题解(C++代码+图论算法优化)

2024蓝桥杯省赛B组“传送阵”题解(C++代码+图论算法优化)

一、题目解读2024年蓝桥杯省B组“传送阵”题目要求处理一个包含n个节点的图,节点间存在单向传输关系。每个节点i可传送至a[i]指定的节点,形成可能存在的环结构。题目需求解从任意节点出发能到达的最长路...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。