方式1:直接递归。
缺点:超出时间限制。。。
class Solution:
def fib(self, n: int) -> int:
if n<=1
return n
else:
return self.fib(n-1)+self.fib(n-2)
方式2:利用python的list做存储,自底向上Bottum-up
缺点:耗时依然长
class Solution:
def fib(self, n: int) -> int:
mylist = [0,1]
if n<2:
return n
else:
for i in range(2,n+1):
mylist.append(mylist[i-1]+mylist[i-2])
return mylist[n]%1000000007
方式3:利用python字典存储,自顶向下Top-down
缺点:依然超出时间限制。。。
class Solution:
def fib(self, n: int) -> int:
memo = {}
if n in memo:
return memo[n]
else:
if n<=1:
f = n
else:
f = self.fib(n-2)+self.fib(n-1)
memo[n] = f
return memo[n]
方式4:利用python字典存储,自底向上Bottum-up
比方式2耗时少
class Solution:
def fib(self, n: int) -> int:
memo = {}
for i in range(n+1):
if i<=1:
f = i
else:
f = memo[i-1]+memo[i-2] ######注意,这里不是函数。通过“记忆”高效实现递归
memo[i] = f
return memo[n]%1000000007