问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
思路
设f(n)
表示青蛙跳上n
阶的跳法,那么就有f(0)=1
,f(1)=1
,f(2)=2
。如果青蛙要跳到第3
阶,那么有两种方式:
- 从第
2
阶跳1
级上第3
阶 - 从第
1
阶跳2
级上第3
阶
于是有f(3)=f(2)+f(1)
,以此类推,青蛙跳到第n
阶有两种方式:
- 从第
n-1
阶跳1
级上第n
阶 - 从第
n-2
阶跳2
级上第n
阶
所以,我们可以得出:f(n)=f(n-2)+f(n-1)
。于是这个问题的本质就类似于求斐波那契数列。
Python实现
class Solution(object):
def __init__(self):
self.f_list = [1,1]
def numWays(self, n):
if len(self.f_list)<n+1:
self.get_f_list(n)
return self.f_list[n]
def get_f_list(self,n):
for i in range(n+1-len(self.f_list)):
self.f_list.append(self.f_list[-1]+self.f_list[-2])