题目
1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
斐波那契数列问题,只有一阶时,跳法f(1)=1;有两阶时,跳法f(2)=2;
第三阶开始就可以分类了,分第一步跳1阶和第一步跳2阶的情况:
第一步跳一阶,后面还剩两阶,因此还有f(2)种跳法;
第一步跳两阶,后面还有一阶,因此还有f(1)种跳法;
如果可以算上一次跳3阶,那么跳法再加1。
到第四阶时,规律就可以总结出来了:
第一步跳一阶,后面还剩3阶,f(3)种跳法
第一步跳两阶,后面还剩2阶,f(2)种跳法
第一步跳三阶,后面还有1阶,f(1)种跳法
加上最后的第一步四阶。
1.f(n)=f(n-1)+f(n-2)
2.f(n)=f(n-1)+f(n-2)+...+f(2)+f(1)+1
代码1
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
floor1=1
floor2=2
floor=0
if number==1:
floor=1
if number==2:
floor=2
if number>2:
i=0
while i<number-2:
floor=floor1+floor2
floor1=floor2
floor2=floor
i+=1
return floor
# write code here
if __name__=="__main__":
a=Solution()
print(a.jumpFloor(4))
print("aaa")
代码2
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
floor1=1
floor2=2
if number==1:
floor=1
if number==2:
floor=2
fn=[]
fn.append(floor1)
fn.append(floor2)
if number>2:
i=2
while i<number:
floor=sum(fn)+1
i+=1
fn.append(floor)
return floor
# write code here
if __name__=="__main__":
a=Solution()
print(a.jumpFloor(4))
print("aaa")