70. 爬楼梯(easy)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶
    示例 2:
    输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
  3. 1 阶 + 1 阶 + 1 阶
  4. 1 阶 + 2 阶
  5. 2 阶 + 1 阶
  • show the code:
### code1
class Solution:
    def climbStairs(self,n):
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n-1)+self.climbStairs(n-2)

### code2
class Solution:
    def climbStairs(self, n: int) -> int:
        a,b = 1,2
        if n == 1:
            return a
        if n == 2:
            return b
        for i in range(n-2):
            a,b = b,a+b
        return b
  • 此题是经典题,一看到题就应该联想到斐波拉契数列。代码一是最直接的解法,但是会重复地求很多次中间值,所以时间复杂度在2^n指数级别,所以肯定是不理想的,甚至都不能AC。
  • 代码二则省去了计算重复值,而且不用储存中间值,只需要储存前两个值即可,因此在时间和空间上都有较大提升。
  • 有关此类题目的解法在力扣官方题解上有很多方法,其中像矩阵法和公式法都只需要logn的复杂度。链接如下:爬楼梯方法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到...
    TAsama阅读 336评论 0 0
  • 传送门 题目要求 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同...
    慧鑫coming阅读 1,491评论 0 1
  • 简述 极客时间算法40讲中所出现的leetcode算法题 题目 【链表】reverse-linked-list(反...
    BestbpF阅读 4,608评论 0 4
  • 写在前沿:本文代码均使用C语言编写 Description:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可...
    小黄大大阅读 314评论 0 0
  • 原题地址:https://leetcode-cn.com/problems/climbing-stairs/ 题目...
    IgorNi阅读 520评论 0 0

友情链接更多精彩内容