LeetCodeEasy- [インタビューの質問10- I.フィボナッチ数列]

関数を記述し、nを入力して、フィボナッチ数列のn番目の項を見つけます。フィボナッチ数列の定義は次のとおりです。

F(0)= 0、F(1)= 1
F(N)= F(N-1)+ F(N-2)、N>1。
フィボナッチシーケンスは0と1から始まり、次にフィボナッチ数は、前の2つの数を足して得られます。

答えは1e9 + 7(1000000007)を法とする必要があります。計算の初期結果が1000000008の場合、1を返します。

例1:

入力:n = 2
出力:1


例2:

入力:n = 5
出力:5

ヒント:

0 <= n <= 100

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

アイデア1:再帰

定義に従って、後で計算してください。

class Solution:
    def fib(self, n: int) -> int:
        if n == 0:
            return 0
        elif n == 1:
            return 1
        a = 0
        b = 1
        for i in range(2, n+1):
            a, b = b, a + b # python交换两个数
        return b % 1000000007

アイデア2:再帰

メモリアレイを追加してもタイムアウトになる

class Solution:
    def fib(self, n: int) -> int:
        self.data = [0] * (n+1)
        self.data[1] = 1
        return self.f(n)
    def f(self, n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        if self.data[n] != 0:
            return self.data[n]
        return (self.f(n-1) + self.f(n-2)) % 1000000007

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105374029