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

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

10个月前 (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阶的总方案数
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

题目重解给定一个字符串,将字符按照出现频率降序排列。例如输入"tree",可能返回"eetr"或"eert"。题目要求我们不考虑字母顺序,只...

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

题目解读‌我们面对的是一个典型的图论问题:给定一个城市的连接矩阵,需要计算其中相互连通的城市群(省份)数量。这个问题可以抽象为无向图中的连通分量计算,每个城市代表图中的一个节点,城市之间的连接关系代表...

力扣654:递归分治的艺术 如何用最大元素构建二叉树

力扣654:递归分治的艺术 如何用最大元素构建二叉树

题目重解我们面对一个看似简单却充满递归魅力的题目:给定一个不含重复元素的整数数组,需要构建一棵特殊的二叉树。这个树的每个父节点都必须是当前子数组中的最大元素,而它的左右子树则分别由该最大值左侧和右侧的...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

力扣933题:队列的妙用:如何高效统计最近请求

力扣933题:队列的妙用:如何高效统计最近请求

题目重解:我们需要设计一个能统计最近3000毫秒内请求次数的系统。每当新的请求到来时,它会带有时间戳t,我们需要返回过去3000毫秒内(包括当前)发生的请求总数。这就像是在时间轴上维护一个滑动窗口,只...

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

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

发表评论

访客

看不清,换一张

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