力扣日記 509 斐波那契 經典

2021-10-03 15:48:53 字數 2014 閱讀 6916

斐波那契數,通常用 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...