【力扣日记】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%的用户

发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104735405