当前位置:首页 > 力扣 > 70.爬楼梯|三步破解动态规划核心奥秘

70.爬楼梯|三步破解动态规划核心奥秘

4个月前 (05-14)

70.爬楼梯|三步破解动态规划核心奥秘 力扣 C++ 动态规划 算法 第1张

题意新解:

站在楼梯底仰望n级台阶,每步可选1或2阶,最终的路径组合犹如斐波那契数列般展开。比如到达第3阶的路径可由第1阶跨两步,或第2阶跨一步构成,这种递推规律揭示了两两相邻状态间的紧密关联。


思路解析:

采用‌动态规划‌策略,构建数组f存储子问题解:

1‌.状态定义‌:f[i]表示到达第i阶的方案数

2‌.边界条件‌:初始状态f[0]=1(平地不动)、f[1]=1(单步直达)

3‌.状态转移‌:循环计算f[i] = f[i-1] + f[i-2],将问题分解为前一级和前两级的子问题之和

4‌.空间特性‌:线性数组存储中间结果,时间复杂度O(n),空间复杂度O(n)

通过递推填充数组,最终直接返回f[n],避免递归开销,通过表格记录保证每个状态仅计算一次。


注释代码:

class Solution {
public:
    int climbStairs(int n) {
        int f[100];          // 定义DP数组,预留足够空间(题目n≤45)
        f[0] = 1;            // 初始状态:0阶视为1种方案(数学定义需要)
        f[1] = 1;            // 边界条件:到达第1阶仅有1种走法
        
        for(int i = 2; i <= n; i++) {
            f[i] = f[i-1] + f[i-2];  // 状态转移:合并前两阶的可能性
        }
        
        return f[n];         // 返回第n阶的总方案数
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

题目重解需要将密码字符串从第target个字符开始进行重新排列,形成新的动态密码。例如输入"password"和target=3,结果应为"swordpas"。...

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

题意解析:给定一组数字,每当你选择一个数字x时,所有等于x-1和x+1的数字都会被自动移除。你需要通过巧妙的选择顺序,最大化获得的点数总和。这个问题可以转化为对离散化数字分布的动态规划问题——将相邻数...

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

题目重解给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们的目标是找到一条路径,使得路径上经过的数字总和最大。这个问题在实际中有许多应用场景,如最优路径规划、...

力扣965题深度解析:单值二叉树的判断技巧

力扣965题深度解析:单值二叉树的判断技巧

重新解读题目 判断一棵二叉树是否为“单值二叉树”,即所有节点的值是否完全相同。题目看似简单,实则考验对树结构递归特性的理解。若一棵树的所有节点值相同,其必然满足:根节点与左右子树的值一致,且...

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

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

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

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

发表评论

访客

看不清,换一张

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