题目:一只青蛙一次可以跳上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
因为该题的解法与斐波拉契数列相同,所以可以参考往期的斐波拉契数列的文章