美文网首页
18爬楼梯

18爬楼梯

作者: Jachin111 | 来源:发表于2020-07-26 23:55 被阅读0次

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

示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

直接递归法

class Solution:
    @functools.lru_cache(100)  # 缓存装饰器
    def climbStairs(self, n: int) -> int:
        if n == 1: return 1
        if n == 2: return 2
        return self.climbStairs(n-1) + self.climbStairs(n-2)

直接DP

class Solution:
    def climbStairs(self, n: int) -> int:
        dp = {}
        dp[1] = 1
        dp[2] = 2
        for i in range(3,n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[n]

DP

class Solution:
    def climbStairs(self, n: int) -> int:
        if n==1 or n==2: return n
        a, b, temp = 1, 2, 0
        for i in range(3,n+1):
            temp = a + b
            a = b
            b = temp
        return temp

斐波那契数列

class Solution:
    def climbStairs(self, n: int) -> int:
        import math
        sqrt5=5**0.5
        fibin=math.pow((1+sqrt5)/2,n+1)-math.pow((1-sqrt5)/2,n+1)
        return int(fibin/sqrt5)

面向测试用例编程

class Solution:
    def climbStairs(self, n: int) -> int:
         a = [1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903]
         return a[n-1]

动态规划法

class Solution:
    def climbStairs(self, n: int) -> int:
        """
        爬到第n楼的方法,为爬到第n-1楼和n-2楼的方法之和
        因为爬到n-1楼后,再爬1楼就能到达n楼
        爬到n-2楼同理
        因此只需初始化爬到1楼和爬到2楼分别有多少种方法,便可以推导出爬到n楼的方法
        """
        fst = 1  # 爬到1楼只有1种方法
        scd = 2  # 爬到2楼有两种方法
        res = 0  # 初始化爬到n楼的方法
        for i in range(2, n):  # 从3楼开始算
            res = fst + scd
            
            fst = scd  # 推导下一层
            scd = res
        
        return max(n, res)  # 返回n和res中较大的那个

来源:力扣(LeetCode)

相关文章

  • 18爬楼梯

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢...

  • 爬楼梯可以瘦大腿吗?

    爬楼梯可以瘦大腿妈?爬楼梯在生活中很常见,爬楼梯其实也是一种运动,很多女性想通过爬楼梯来瘦大腿,那么,爬楼梯可以瘦...

  • 爬楼梯随想

    爬楼梯随想,是因为我每天爬三次楼梯,20+18+18,闲着没事就瞎想,故有此系列! 书接前文,超市行业我没做过,全...

  • 下楼梯

    都说上山容易下山难。 爬楼梯写是。 我打算从18L走到1L,因为从1L爬到18L会消耗我大量的力气。 于是,我出发...

  • 最不像运动的运动,减脂效果比跑步还好!

    最好的运动项目就藏在生活中!比如:爬楼梯! 有朋友问,每天上班回家都要爬楼梯,那么,爬楼梯能减脂吗?我说,爬楼梯当...

  • 爬楼梯,爬楼梯,还是爬楼梯

    我们家弟弟,十一个月,腿脚不利索,站都站不稳,但是,非常钟爱爬楼梯,硬拉着你爬那种。 如今,他饿了,要爬楼梯,饱了...

  • 2021年7月20日,河南特大暴雨一个平凡家庭的自述

    今天周日,公司通知爬楼梯上班。18楼,平时偶尔不想等电梯也是这么爬。对我来说小case。 这次特大暴雨,验证了我家...

  • 什么是垂直马拉松

    爬楼梯!

  • 无标题文章

    爬楼梯

  • LeetCode中动态规划问题的做题记录

    常规动态规划问题 相关题目: 70.爬楼梯 70.爬楼梯 描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每...

网友评论

      本文标题:18爬楼梯

      本文链接:https://www.haomeiwen.com/subject/jkwnlktx.html