斐波那契數,通常用 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.
示例 2:輸入:3
輸出:2
解釋:f(3)
= f(2)
+ f(1)
=1+1=2.
示例 3:輸入:4
輸出:3
解釋:f(4)
= f(3)
+ f(2)
=2+1=3.
0 ≤ n ≤ 30
這道題解題思路很多,這裡採用遞迴和動態規劃來解:
思路1:遞迴
關鍵的遞推關係:f(n) = f(n-1)+f(n-2)
基本問題(邊界條件)f(1)=f(2)=1
**如下:
時間複雜度:o(n)
空間複雜度:o(n)
思路2:動態規劃
依然利用遞推關係,至下而上解題。res為長度為n的陣列用來存放1到n下的結果。
狀態方程:res[n] =res[n-1] + res[n+1]
**如下:
class
solution
:def
fib(self, n:
int)
->
int:
if n ==
1or n ==0:
return n
res =[1
for _ in
range
(n)]
for i in
range(2
,n):
res[i]
= res[i-1]
+ res[i-2]
return res[n-
1]
測試結果:
時間複雜度:o(n)
空間複雜度:o(n)
這道題還有暴力法、採用輔助雜湊表的記憶化遞迴、公式法等等可以嘗試。
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...
python演算法與資料結構
若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...