剑指offer—跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
数据范围:n≤1000
要求:时间复杂度:O(n),空间复杂度:O(1)

该题考察的知识点还是斐波拉契数列
青蛙跳第一级台阶有1种方法:1
第二级台阶有2种方法:1、1 / 2
第三级台阶有3种方法:1、1、1 / 1、2 / 2,1
第四级台阶有5种跳法:1,1,2 / 2,2 / 1,1,1,1 / 1,2,1 / 2,1
………………
由于青蛙一次性只能跳一级或者两级通过上面的规律可以看出
青蛙跳第二级台阶等于跳一级台阶再加一级或者直接跳两级
  即f(2) = f(1) + 1
跳三级台阶等于跳一级台阶再加上二级或者跳两级台阶再加一级
  即f(3) = f(1) + f(2)
跳四级台阶等于跳二级台阶再加上二级或者跳三级台阶再加一级
  f(4) = f(2) + f(3)
………………
观察规律后发现就是斐波拉契数列,因此该题就变成了求斐波拉契数列
代码如下

class Solution:
    def jumpFloor1(self, number): # 递归方法
        if number <= 1:
            return 1
        return self.jumpFloor(number - 1) + self.jumpFloor(number - 2)

    def jumpFloor2(self, number): # 循环方法
        if number < 2:
            return 1
        sum1 = 1
        sum2 = 1
        for i in range(number - 1):
            sum3 = sum2 + sum1
            sum1 = sum2
            sum2 = sum3
        return sum3

因为该题的解法与斐波拉契数列相同,所以可以参考往期的斐波拉契数列的文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值