斐波那契数列

为何什么用字典保存计算结果而不是列表?

使用字典的优势:

  1. 不必像使用列表一样提前分配内存
  2. 在字典中存入0,1对应的斐波那契数之后不必对0,1特殊处理
  3. 某个数是否算过的判断方式比列表更优雅
点击查看代码
class Solution:
    def fib_help(self, n, nb):
        if n < 2:
            return n

        # 如果n已经计算过了,那么直接返回
        if nb[n] != 0:
            return nb[n]
        else:
            # 判断n-1, n-2是否需要重新计算
            if nb[n-1] == 0:
                nb[n-1] = Solution.fib_help(self, n-1, nb)
            elif nb[n-2] == 0:
                nb[n-2] = Solution.fib_help(self, n-2, nb)
        return  nb[n-1] + nb[n-2]

    def fib(self, n: int) -> int:
        # 提前分配为列表分配内存
        # 希望给一个n,能求出对应的斐波那契数
        # 斐波那契数从0开始,所以要存n+1个数
        nb = [0] * (n+1)
        return Solution.fib_help(self, n, nb)
点击查看代码
    def fib_help(self, n, nb = {0: 0, 1: 1}):
        if n in nb:  
            return nb[n]
        else:
            if n-1 not in nb:
                nb[n-1] = Solution.fib_help(self, n-1, nb)
            elif n-2 not in nb:
                nb[n-2] = Solution.fib_help(self, n-2, nb)

        return  nb[n-1] + nb[n-2]
    def fib(self, n: int) -> int:
        return Solution.fib_help(self, n)

posted @ 2022-07-07 18:52  孟悦涛  阅读(60)  评论(0)    收藏  举报