题目描述
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。
- 求该青蛙跳上一个n级的台阶总共有多少种跳法。
理解
- 真是一只变态的青蛙
解题思路
解题1
- 如果是n级台阶,假设有F(n)种跳法,那一定也是先跳1级或者先跳2级……或者n-1级,或者直接跳到n级。
- 跳1级后有F(n-1)种,跳2级后有F(n-2)种……跳n-1级有F(1)种,直接跳到n级台阶为1种,故有F(n)=F(n-1)+F(n-2)+……+F(1)+1
class Solution:
def jumpFloorII(self, number):
a = [1,2]
if number == 1:
return 1
elif number == 2:
return 2
else:
for i in range(2,number):
ai=1
while i> 0:
i-=1
ai+=a[i]
a.append(ai)
print(a)
return a[number-1]
简化写法
class Solution:
def jumpFloorII(self, number):
if number < 3:
return number
a = [0,1,2]
for i in range(3, number+1):
a.append(sum(a)+1)
return a[number]
思路2
- 每一级台阶跳或不跳都有两种
- 一级台阶有1种,2^0种
- 二级台阶,第一级台阶跳或者不跳,2^1种
- 三级台阶,第一级台阶跳或者不跳,2种,第二级台阶跳或者不跳,2种,共2^2种
- n级台阶……共2^{n-1}种,即F(n) = 2^(n-1)
class Solution:
def jumpFloorII(self, number):
if number <= 0:
return 0
else:
return 2**(number-1)