【剑指Offer】斐波那契数列 解题报告(Python)

标签(空格分隔): LeetCode


题目地址:https://www.nowcoder.com/ta/coding-interviews

题目描述:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39

Ways

直接递归解法由于有很多的重复计算,因此会超时。
所以可以使用字典保存计算过了的数字,省去了重复的计算,速度很快。

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.keep = {0:0, 1:1}

    def Fibonacci(self, n):
        if n in self.keep:
            return self.keep[n]
        else:
            fn = self.Fibonacci(n - 1) + self.Fibonacci(n - 2)
            self.keep[n] = fn
            return fn

如果不使用递归,而是直接使用前两个数字的和相加得到第三个数字的方式能把时间复杂度降到O(n)。

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        a,b = 0,1
        for i in range(n):
            a,b = b,a+b
        return a

Date

2018 年 3 月 9 日