题目描述
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N,计算 F(N)。
算法
缓存+装饰器
class Solution:
import functools
@functools.lru_cache(maxsize=None)
def fib(self, N: int) -> int:
if N < 2:
return N
else:
return self.fib(N-1) + self.fib(N-2)
执行用时 :36 ms, 在所有 Python3 提交中击败了62.35%的用户
内存消耗 :13.5 MB, 在所有 Python3 提交中击败了18.54%的用户
迭代
class Solution:
def fib(self, N: int) -> int:
if N==0:return 0
if N==1:return 1
a,b=0,1
while N>1:
a,b=b,a+b
N-=1
return b
缓存表
class Solution:
def fib(self, N: int) -> int:
cache = {}
def cal(N):
if N in cache:
return cache[N]
elif N < 2:
return N
else:
cache[N] = cal(N-1) + cal(N-2)
return cache[N]
return cal(N)
上面三种方法有基本一致的时间复杂度。
暴力
class Solution:
def fib(self, N: int) -> int:
if N < 2:return N
return self.fib(N-1) + self.fib(N-2)
执行用时 :988 ms, 在所有 Python3 提交中击败了9.49%的用户
内存消耗 :13.3 MB, 在所有 Python3 提交中击败了18.54%的用户