【力扣日記】509 斐波那契 | 經典

題目描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章