力扣由浅至深 每日一题.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;
    }
}
相关推荐
Jelena技术达人7 分钟前
淘宝/天猫按图搜索(拍立淘)item_search_img API接口实战指南
算法·图搜索算法
Adorable老犀牛18 分钟前
阿里云-基于通义灵码实现高效 AI 编码 | 8 | 上手实操:LeetCode学习宝典,通义灵码赋能算法高效突破
学习·算法·leetcode
望获linux23 分钟前
【实时Linux实战系列】规避缺页中断:mlock/hugetlb 与页面预热
java·linux·服务器·数据库·chrome·算法
菜就多练,以前是以前,现在是现在25 分钟前
Codeforces Round 1048 (Div. 2)
数据结构·c++·算法
林木辛1 小时前
LeetCode 热题 160.相交链表(双指针)
算法·leetcode·链表
野生的编程萌新1 小时前
【C++深学日志】从0开始的C++生活
c语言·开发语言·c++·算法
ulias2122 小时前
单元最短路问题
数据库·c++·算法·动态规划
崎岖Qiu2 小时前
leetcode380:RandomizedSet - O(1)时间插入删除和获取随机元素(数组+哈希表的巧妙结合)
java·数据结构·算法·leetcode·力扣·散列表
ZLRRLZ2 小时前
【数据结构】图
数据结构·算法·图论
Ada_疯丫头2 小时前
杰伊·温格罗教我数据结构与算法
算法