python-leetcode-509. 斐波那契數

第一種 遞歸法
寫法最簡潔,但是效率最低,會出現大量的重複計算,時間複雜度O(1.618^n),而且最深度1000

class Solution(object):
    def fib(self, N):
        """
        :type N: int
        :rtype: int
        """
        assert N >= 0, "N > 0"
        if N <= 1:
            return N
        return self.fib(N-1) + self.fib(N-2)

第二種 遞推法
遞推法,就是遞增法,時間複雜度是 O(n),呈線性增長,如果數據量巨大,速度會越拖越慢

class Solution(object):
    def fib(self, N):
        """
        :type N: int
        :rtype: int
        """
        a , b = 0,1
        for i in range(N):
            a,b=b,a+b
        return a

第三種 生成器
帶有yield的函數都被看成生成器,生成器是可迭代對象,且具備__iter__ 和 __next__方法, 可以遍歷獲取元素
python要求迭代器本身也是可迭代的,所以我們還要爲迭代器實現__iter__方法,而__iter__方法要返回一個迭代器,迭代器自身正是一個迭代器,所以迭代器的__iter__方法返回自身即可

class Solution(object):
    def fib(self, N):
        """
        :type N: int
        :rtype: int
        """
        a, b = 0, 1
        while N:
            a, b = b, a + b
            N -= 1
            yeil a
        return a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章