題目描述
斐波那契數,通常用 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%的用戶