力扣由浅至深 每日一题.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;
    }
}
相关推荐
独行soc1 小时前
2025年大模型安全岗的面试汇总(题目+回答)
android·人工智能·安全·面试·职场和发展·渗透测试
月殇_木言1 小时前
算法基础 第3章 数据结构
数据结构·算法
亮亮爱刷题2 小时前
算法提升之树上问题-(LCA)
数据结构·算法·leetcode·深度优先
火车叨位去19492 小时前
力扣top100(day03-01)--二叉树 03
算法·leetcode·职场和发展
岁忧2 小时前
(LeetCode 每日一题) 1780. 判断一个数字是否可以表示成三的幂的和 (数学、三进制数)
java·c++·算法·leetcode·职场和发展·go
浩少7023 小时前
LeetCode-16day:栈
java·数据结构·算法
胖咕噜的稞达鸭5 小时前
数据结构---关于复杂度的基础解析与梳理
c语言·数据结构·算法·leetcode
高山莫衣5 小时前
Polyak-Ruppert 平均
人工智能·算法·机器学习
秋难降7 小时前
【数据结构与算法】———链表归并排序的优势
python·算法·排序算法
用户30356298445747 小时前
LightRAG应用实践
人工智能·算法