力扣由浅至深 每日一题.14 爬楼梯

因为困难多丧志,不叫红尘惑坚心

------ 24.3.25

爬楼梯

提示

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

动态规划

思路和算法

在只有第一层和第二层楼梯时,上楼的方案我们已知,当n>=3时,采用斐波那契数列,f(n)=f(n-1)+f(n-2)

所以对n进行判断,可以直接解得题目

青蛙跳台问题与斐波那契数列问题的区别在于起始值不同:

青蛙跳台阶问题: f(0)=1 , f(1)=1 , f(2)=2 。

斐波那契数列问题: f(0)=0 , f(1)=1 ,f(2)=1 。

若新建长度为 n 的 dp 列表,则空间复杂度为 O(N)。

由于 dp 列表第 i 项只与第 i−1 和第 i−2 项有关,因此只需要初始化三个整形变量 sum, a, b ,利用辅助变量 sum 使 a,b 两数字交替前进即可 (具体实现见代码) 。由于省去了 dp 列表空间,因此空间复杂度降至 O(1)。

java 复制代码
class Solution {
    public int climbStairs(int n) {
        int a = 1, b = 1, sum;  //初始值
        for(int i = 0; i < n - 1; i++){    //循环进行遍历
            sum = a + b;    //第三层等于前两层之和
            a = b;      //第一层等于第二层
            b = sum;    //第二层等于原先第一层与第二层之和
        }
        return b;
    }
}
相关推荐
程序员雷欧42 分钟前
大厂OS面试高频题
面试·职场和发展
技术小黑1 小时前
CNN算法实战系列03 | DenseNet121算法实战与解析
pytorch·深度学习·算法·cnn
wearegogog1232 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿2 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
pkowner3 小时前
若依分页问题及解决方法
java·前端·算法
呃呃本3 小时前
算法题(栈)
算法
通信小呆呆3 小时前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
橙淮3 小时前
Java数组与链表:特性对比与应用场景
数据结构·算法
炽烈小老头3 小时前
【每天学习一点算法 2026/05/15】被围绕的区域
学习·算法·深度优先
芜湖xin3 小时前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心