f(1)=1,f(2)=1, f(n)=f(n - 1)+f(n - 2)(n ≥ 3,n ∈ n*)
題目描述:
現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。
解題思路:
1)第一種解法:遞迴
2)第二種解法:迴圈
實現**如下:
class
solution
:def
fibonacci
(self, n)
:# write code here
# n=0,f(0)=0
# n=1,f(1)=1
# n=2,f(2)=1
# f(n)=f(n-1)+f(n-2)
''' # 遞迴實現(會超時,時間複雜度為o(2^n))
if n<=1:
return n
return self.fibonacci(n-1)+self.fibonacci(n-2)
'''# for迴圈解法(時間複雜度為o(n))
if n<=1:
return n
# 當n>1 f(n)=f(n-1)+f(n-2)
a=1 b=
0 res=
0for i in
range(0
,n-1):
res=a+b
b=aa=res
return res
if __name__==
"__main__"
: s=solution(
)print
(s.fibonscci(4)
)
函式中return的作用
返復回乙個值給函式。
結束函式,不執行後面的語句。(例如你執行度到乙個地方,雖然後面還有**但是你不想問再繼續執行,這時你就可以直接用答 return;這條語句來結束函式。)
if __ name __==" __ main __" 的理解
題目描述:
設有f(n)種跳法,假設從第n階往前跳,f(n)分兩種情況:
當f(n)跳1階台階時,剩下f(n-1)種跳法;
當f(n)跳2階台階時,剩下f(n-2)種跳法;
所以,得出f(n)=f(n-1)+f(n-2),n>2
實現**如下:
class
solution
:def
jumpfloor
(self, number)
:# write code here
# number=0 沒有
# number=1 1
# number=2 2
# number=3 3
# number=4 5
# 通過找規律發現,f(n)=f(n-1)+f(n-2) 當n>2
# n=1 f(n)=1
# n=2 f(n)=2
# 這裡用for迴圈的方法實現
if number<3:
return number
a =1 b =
2 res =
0for i in
range(3
,number+1)
: res = a+b
a = b
b = res
return res
題目描述:設有f(n)種跳法,假設從第n階往前跳,f(n)分n種情況:
當f(n)跳1階台階時,剩下f(n-1)種跳法;
當f(n)跳2階台階時,剩下f(n-2)種跳法;
…當f(n)跳n-1階台階時,剩下f(1)種跳法;
當f(n)跳n階台階時,剩下f(0)種跳法;
所以,得出f(n)=f(n-1)+f(n-2)+…+f(1)+f(0) (由於f(0)=0,可忽略)
實現**如下:
class
solution
:def
jumpfloorii
(self, number)
:# write code here
''' #解法一:找規律得出公式
# number=1 1
# number=2 2
# number=3 4
# number=4 8
# number=n 2^(n-1)
# 得出f(n)=2^(n-1)
return pow(2,number+1)
'''#解法二:for迴圈解法
# f(n)=f(n-1)+f(n-2)+...+f(1)
# f(n-1)=f(n-2)+...+f(1)
# f(n)=2f(n-1) 遞迴
if number==1:
return
1 a =
1 res =
0for i in
range(2
,number+1)
: res =2*a
a = res
return res
題目描述:我們可以用2 * 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 * 1的小矩形無重疊地覆蓋乙個2 * n的大矩形,總共有多少種方法?
解題思路:
設有f(n)種方法,f(n)分兩種情況:
當小矩形一開始豎著放時,則還剩下2*(n-1)的空間,即還剩f(n-1)種放法;
當小矩形一開始橫著放時,則還剩下2*(n-2)的空間,即還剩f(n-2)種放法;
所以,得出f(n)=f(n-1)+f(n-2),n>2
實現**如下:
class
solution
:def
rectcover
(self, number)
:# write code here
# 通過找規律得出:f(n)=f(n-1)+f(n-2)
if number==0:
return
0if number==1:
return
1if number==2:
return
2 a =
1 b =
2for i in
range(3
,number+1)
: res = a+b
a = b
b = res
return res
劍指offer(Python)替換空格
這道題要求是 將乙個字串中的空格替換成 20 有多少個空格就替換成多少個 20 例如 hello world 中間有兩個空格,則需要輸出的形式是 hello 20 20world 字串首尾的空格亦算在內。class solution def replacespace self,s return 20...
劍指offer Python 替換空格
請實現乙個函式,將乙個字串中的每個空格替換成 20 python字串,有replace方法,可以實現替換,第乙個引數是要替換的內容,第二個引數是替換的新內容 能夠快速完成,果然python作為一種高階語言,不太適合做演算法 但是 replace 相當於 insert 在替換 時,會將原字串元素的位置...
《劍指offer》python 動態規劃
動態規劃是利用空間去換取時間的演算法.主要看 1.初始條件 2.重疊子問題 3.狀態轉移方程 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 coding utf 8 class solution def jumpfloo...