斐波那契數,通常用 f(n) 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:
f(0) = 0, f(1) = 1
f(n) = f(n - 1) + f(n - 2), 其中 n > 1.
給定 n,計算 f(n)。
class
solution
:import functools
@functools.lru_cache(maxsize=
none
)def
fib(self, n:
int)
->
int:
if n <2:
return n
else
:return self.fib(n-1)
+ self.fib(n-
2)
執行用時 :36 ms, 在所有 python3 提交中擊敗了62.35%的使用者記憶體消耗 :13.5 mb, 在所有 python3 提交中擊敗了18.54%的使用者
class
solution
:def
fib(self, n:
int)
->
int:
if n==0:
return
0if n==1:
return
1 a,b=0,
1while n>1:
a,b=b,a+b
n-=1return b
class
solution
:def
fib(self, n:
int)
->
int:
cache =
defcal
(n):
if n in cache:
return cache[n]
elif n <2:
return n
else
: cache[n]
= cal(n-1)
+ cal(n-2)
return cache[n]
return cal(n)
上面三種方法有基本一致的時間複雜度。
class
solution
:def
fib(self, n:
int)
->
int:
if n <2:
return n
return self.fib(n-1)
+ self.fib(n-
2)
執行用時 :988 ms, 在所有 python3 提交中擊敗了9.49%的使用者記憶體消耗 :13.3 mb, 在所有 python3 提交中擊敗了18.54%的使用者
def
fib(self, n)
->
int:
a, b =0,
1 res =
while b <= n:
a, b = b, a + b
return res
class
solution
:def
fib(self, n:
int)
->
int:
dp=[0
,1]+
[0]*
(n-1
)for i in
range(2
,n+1):
dp[i]
=(dp[i-1]
+dp[i-2]
)%(10
**9+7
)return dp[n]
力扣 509 斐波那契數
斐波那契數,通常用 f n 表示,形成的序列稱為 斐波那契數列 該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1 給你 n 請計算 f n 示例 1 輸入 2 輸出 1 解釋 f 2 f 1 f 0 1 0...
509 斐波那契數
斐波那契數,通常用 f n 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.給定 n,計算 f n 示例 1 輸入 2 輸出 1 解釋 f 2 f 1 f 0 1 0 1...
509 斐波那契數
斐波那契數,通常用 f n 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.給定 n,計算 f n 示例 1 輸入 2 輸出 1 解釋 f 2 f 1 f 0 1 0 1...