[leetcode] 70. 爬楼梯

文章目录

题目描述

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

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

示例 1:

复制代码
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

复制代码
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
3. 1 阶 + 1 阶 + 1 阶
4. 1 阶 + 2 阶
5. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

解题方法

动态规划

这道题目求解符合斐波那契数列的特点。当我们爬到第n阶楼梯时,最后一步一共有两种情况,要么从第n - 1阶楼梯迈1步,要么从第n - 2阶楼梯迈2步;所以爬到第n阶楼梯的方法数等于爬到第n - 1阶楼梯的方法数加上爬到第n - 2阶楼梯的方法数。

我们可以总结出如下规律,设 f ( n ) f(n) f(n)为爬到第n阶楼梯的方法数,则:

  • 当 n = 0 n = 0 n=0时, f ( 0 ) = 1 f(0) = 1 f(0)=1
  • 当 n = 1 n = 1 n=1时, f ( 1 ) = 1 f(1) = 1 f(1)=1
  • 当 n > 1 n > 1 n>1时, f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2) f(n)=f(n−1)+f(n−2)

根据规律使用动态规划即可求解。

java代码

java 复制代码
public int climbStairs(int n) {
    int[] dp = new int[n + 1];
    dp[0] = 1;
    dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 2] + dp[i - 1];
    }
    return dp[n];
}

复杂度分析

  • 时间复杂度: O ( N ) O(N) O(N)
  • 空间复杂度: O ( N ) O(N) O(N)

  • 个人小游戏

相关推荐
来不及辣哎呀17 小时前
学习Java第六十二天——Hot 100-09-438. 找到字符串中所有字母异位词
java·开发语言·学习
linsa_pursuer17 小时前
移动零算法
java·算法
小宇的天下17 小时前
Calibre 工具支持多种几何版图格式。
算法
苏宸啊17 小时前
排序(一)插入 希尔 选择 堆排 冒泡
算法·排序算法
lihao lihao17 小时前
模板进阶
java·数据结构·算法
山风wind17 小时前
Spring中责任链模式的工业级应用简单剖析
java·spring·责任链模式
慕容青峰17 小时前
【加拿大计算机竞赛 CCO 小行星采矿】题解
c++·算法·sublime text
Ghost-Silver17 小时前
2025年度总结
开发语言·数据结构·c++·算法
Element_南笙17 小时前
BUG:ModuleNotFoundError: No module named ‘milvus_lite‘
java·服务器·数据库
POLITE317 小时前
Leetcode 54.螺旋矩阵 JavaScript (Day 8)
javascript·leetcode·矩阵