1914 字
约 6 分钟
9
070.爬楼梯
无标签

070.爬楼梯

作者:沉默王二
发布时间:2023-01-10T11:23:06.364+0800


本题解同时收录在星球专栏《二哥的 LeetCode 刷题笔记》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记,数学表达公式也能显示出来),访问地址和密码:https://t.zsxq.com/6iuzn6I

070.爬楼梯

题意

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

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

难度

简单

示例

示例 1:

输入:n = 2

解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶

示例2:

输入:n = 3

解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶

分析

我们先写出比较小的情况下的答案:

  • 当时候
  • ans=1
  • 当时候
  • ans=1
  • 当时候
  • ans=2
  • 当时候
  • ans=3
  • 当时候
  • ans=5

我们可以发现一个规律——时的ans等于和的ans之和。

想要证明这个结论也非常简单,因为我们每次只能爬 1 个或 2 个台阶,那么当前台阶,只能从之前的 1 个台阶或者 2 个台阶爬过来,所以答案就是它们二者之和,即。

这样子,我们就可以在的时间内,计算出答案了。

class Solution {

        int[] f = new int[]{1,1,2};        for(int i = 2;i <= n;i++){            f[i % 3] = f[(i - 1 + 3) % 3] + f[(i - 2 + 3) % 3];        }        return f[n % 3];    }}

执行效率:

这其实是典型的递推问题,也是著名的斐波那契数列衍生出来的问题,同时是最基础的动态规划问题。

总结

本题不算难,更多的是作为递推和动态规划的引入,方便初学者学习。

力扣链接:https://leetcode.cn/problems/climbing-stairs/

一步一个脚印

不积跬步无以至千里,不积小流无以成江海。LeetCode - 100天从算法小白到卷王正式启动了,我们计划周一到周五至少每天更新一篇,周六周日更新一篇,目标 300 道 LeetCode 经典题。

PDF 版本目前只针对**二哥编程星球 的球友开放,如果你也想一起打卡学习算法的话,戳链接 **加入我们吧。

一个人可以走得很快,但一群人才能走得更远。二哥编程星球 (目前已有 1300 多名球友加入)里面的每个球友都非常的友善,除了鼓励你,还会给你提出合理的建议,一起冲!

本题解同时收录在星球专栏《二哥的 LeetCode 刷题笔记》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记,数学表达公式也能显示出来),访问地址和密码:https://t.zsxq.com/6iuzn6I

070.爬楼梯

题意

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

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

难度

简单

示例

示例 1:

输入:n = 2

解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶

示例2:

输入:n = 3

解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶

分析

我们先写出比较小的情况下的答案:

  • 当时候
  • ans=1
  • 当时候
  • ans=1
  • 当时候
  • ans=2
  • 当时候
  • ans=3
  • 当时候
  • ans=5

我们可以发现一个规律——时的ans等于和的ans之和。

想要证明这个结论也非常简单,因为我们每次只能爬 1 个或 2 个台阶,那么当前台阶,只能从之前的 1 个台阶或者 2 个台阶爬过来,所以答案就是它们二者之和,即。

这样子,我们就可以在的时间内,计算出答案了。

class Solution {

        int[] f = new int[]{1,1,2};        for(int i = 2;i <= n;i++){            f[i % 3] = f[(i - 1 + 3) % 3] + f[(i - 2 + 3) % 3];        }        return f[n % 3];    }}

执行效率:

这其实是典型的递推问题,也是著名的斐波那契数列衍生出来的问题,同时是最基础的动态规划问题。

总结

本题不算难,更多的是作为递推和动态规划的引入,方便初学者学习。

力扣链接:https://leetcode.cn/problems/climbing-stairs/

一步一个脚印

不积跬步无以至千里,不积小流无以成江海。LeetCode - 100天从算法小白到卷王正式启动了,我们计划周一到周五至少每天更新一篇,周六周日更新一篇,目标 300 道 LeetCode 经典题。

PDF 版本目前只针对**二哥编程星球 的球友开放,如果你也想一起打卡学习算法的话,戳链接 **加入我们吧。

一个人可以走得很快,但一群人才能走得更远。二哥编程星球 (目前已有 1300 多名球友加入)里面的每个球友都非常的友善,除了鼓励你,还会给你提出合理的建议,一起冲!

本题解同时收录在星球专栏《二哥的 LeetCode 刷题笔记》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记,数学表达公式也能显示出来),访问地址和密码:https://t.zsxq.com/6iuzn6I

070.爬楼梯

题意

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

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

难度

简单

示例

示例 1:

输入:n = 2

解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶

示例2:

输入:n = 3

解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶

分析

我们先写出比较小的情况下的答案:

  • 当时候
  • ans=1
  • 当时候
  • ans=1
  • 当时候
  • ans=2
  • 当时候
  • ans=3
  • 当时候
  • ans=5

我们可以发现一个规律——时的ans等于和的ans之和。

想要证明这个结论也非常简单,因为我们每次只能爬 1 个或 2 个台阶,那么当前台阶,只能从之前的 1 个台阶或者 2 个台阶爬过来,所以答案就是它们二者之和,即。

这样子,我们就可以在的时间内,计算出答案了。

class Solution {

        int[] f = new int[]{1,1,2};        for(int i = 2;i <= n;i++){            f[i % 3] = f[(i - 1 + 3) % 3] + f[(i - 2 + 3) % 3];        }        return f[n % 3];    }}

执行效率:

这其实是典型的递推问题,也是著名的斐波那契数列衍生出来的问题,同时是最基础的动态规划问题。

总结

本题不算难,更多的是作为递推和动态规划的引入,方便初学者学习。

力扣链接:https://leetcode.cn/problems/climbing-stairs/

一步一个脚印

不积跬步无以至千里,不积小流无以成江海。LeetCode - 100天从算法小白到卷王正式启动了,我们计划周一到周五至少每天更新一篇,周六周日更新一篇,目标 300 道 LeetCode 经典题。

PDF 版本目前只针对**二哥编程星球 的球友开放,如果你也想一起打卡学习算法的话,戳链接 **加入我们吧。

一个人可以走得很快,但一群人才能走得更远。二哥编程星球 (目前已有 1300 多名球友加入)里面的每个球友都非常的友善,除了鼓励你,还会给你提出合理的建议,一起冲!

            知识星球
            
    
    
        
        扫码加入星球
        查看更多优质内容
    
    https://wx.zsxq.com/mweb/views/joingroup/join_group.html?group_id=15522885221412
070.爬楼梯
https://clxhxhhr.top/posts/2524/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。