関数を記述し、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