誰もがフィボナッチ数列を知っていて、整数nが必要になりました。フィボナッチ数列のn番目の項目を出力してください。n <= 39
n = 0、f(n)= 0 n = 1、f(n)= 1 n> 1、f(n)= f(n-1)+ f(n-2)
メソッド1:サイクルをより速く使用する
class Solution:
def fib(self, x):
if x<=0:
return 0
elif x ==1:
return 1
else:
n, a, b = 0, 0, 1
while n+1 != x:
a, b = b, a + b
n += 1
return b
a = Solution()
b = a.fib(4)
print(b)
方法2:再帰を使用する、遅い
class Solution:
def fib(self, x):
if x<= 0:
return 0
elif x==1:
return 1
else:
return self.fib(x-1)+self.fib(x-2)
a = Solution()
b = a.fib(4)
print(b)
トピックの拡張1:ステップ
のジャンプカエルは一度に1 ステップまでジャンプしたり、2ステップまでジャンプしたりできます。nレベルのステップにジャンプする方法をカエルに尋ねます。
アイデア:
ステップが1つしかない場合、方法は1つだけです。2つのステップがある場合、ジャンプする方法は2つあります。2つのジャンプ、一度に1つのステップ、または一度に2つのステップです
。nステップのジャンプ方法は、nの関数として実行します。(n)。n> 2の場合、最初のジャンプには2つの異なるジャンプがあります。1つは、1つのレベルを初めてジャンプすることです。ジャンプの数は、n-1ジャンプの残りの数、つまりf(n-1)です。 、2番目は2つのレベルを初めてジャンプすることであり、ジャンプの数は残りのn-2ジャンプの数、つまりf(n-2)です。したがって、ジャンプの総数はf(n)= f(n-1)+ f(n-2)です。それはフィボナッチ数列と同じです。同じ問題、つまり、n番目のプラットフォームジャンプの数は、n-1プラットフォームジャンプの数とn-2プラットフォームジャンプの数の合計に等しくなります。
#循环:
class Solution:
def jump(self, x):
if x <= 0:
return 0
elif x == 1:
return 1
elif x == 2:
return 2
else:
n, a, b = 1, 1, 1
while n != x:
a, b = b, a + b
n += 1
return b
#另一种写法:实测两种运行时间相近
#a, b = 1,2
#for i in range(3,x+1):
#a,b = b,a+b
#return b
#递归:
class Solution:
def jump(self,n):
if n == 1:
return 1#如果是一个台阶,有一种跳法
elif n == 2:
return 2#如果是两个台阶,有两种跳法
else:
return self.jump(n-1)+self.jump(n-2)
トピック展開2:異常なジャンプステップ
カエルは一度に1 ステップ、または2ステップジャンプできます... nレベルにジャンプすることもできます。nレベルのステップにジャンプする方法をカエルに尋ねます。
アイデア:同じ理由で、n次のプラットフォームのジャンプメソッドをnの関数f(n)として使用します。n> 2の場合、初めてジャンプするときに多くの違いがあります。1つ目は初めて1レベルだけジャンプしてn-1レベルのジャンプを残します。2つ目は初めて2レベルだけジャンプします。 n-2レベルジャンプ方式では、3番目は3レベルだけを初めてジャンプし、残りのn-3レベルジャンプ方式は... 123レベルジャンプ方式が124の場合、4番目のレベルジャンプ方式は最初の一度に1レベルのみ+初回は2レベルのみ+初回は3レベル+初回は4レベル、つまりf(n)= f(n-1)+ f(n-2)+ f(n-3)+ f(n-4)、つまりf(3)+ f(2)+ f(1)+ f(0)= 4 + 2 + 1 + 1 = 8、法則が2であることを確認** (N-1)
class Solution:
def jump(self, n):
if n<=0:
return 0
return 2**(n-1)
トピック展開3:長方形のカバレッジ
21個の小さな長方形を使用して、大きな長方形を水平または垂直にカバーできます。2 * nの大きい長方形を、重なり合わずにn 2の小さい長方形でカバーする方法はいくつありますか?
アイデア:同様に、n列の長方形の配置方法をf(n)と考えてみましょう。n>には2種類の配置方法があります:垂直、左f(n-1)、水平、左f (n-2)播種方法。合計f(n)= f(n-1)+ f(n-2)。コードは同じです