質問自体は難しくありませんが、考えを必要とします。
フィボナッチ:F(N)= F(N-1)+ F(N-2)、再帰的に使用することができるが、時間複雑度はO(2 ^ N)であります
どうということは、再帰的なアルゴリズムの時間の複雑さのためにO(2 ^ N)は、最適化する必要がありますされている:配列と店!
長さN Sの定義された配列 小規模から大規模まで、得られたデータは、配列S [i]の中に格納されます。
したがって、次の質問:
タイトル説明
カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2に飛び乗っすることができます。カエルはどのように多くのジャンプ(別の計算異なる結果の順序)は、n級レベルの合計を求めて飛び込みました。
アイデア:
あなたは再帰を使用することができますが、再帰時間の複雑さは高すぎます。スイッチアレイ店は、N-1およびN-2階段方法をジャンプホップ
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
ans = [1]*(number+1)
for i in range(2,number+1):
ans[i] = ans[i-1]+ans[i-2]
return ans[number]
O(N)であり、時間と空間複雑さのこの時点で、インデックスiの各アレイが使用する最初の2つの数字ことがわかります。そして、それを改善します:
class Solution:
def jumpFloor(self, number):
# write code here
ans0 = 1
ans1 = 1
for i in range(2,number+1):
temp = ans0 + ans1
ans0 = ans1
ans1 = temp
return ans1
O(N)のこの時間複雑で、空間的複雑度はO(1)であります
変形の問題:
カエルは、クラス1レベルにジャンプすることができます。また、レベル2に飛び乗っすることができます...... nはまた、ステージの上にジャンプすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました。
アイデア:
Nレベル記憶ステップジャンプのアレイを有するF
F [N] = F [0] + F [1] + ... + F [N-2] + F [N-1]
F [N-1] = F [0] + F [1] + ... + F [N-2]以来
したがって、F [N] = 2 * F [N-1]
class Solution:
def jumpFloorII(self, number):
ans = 1
for i in range(2,number+1):
ans = 2*ans
return ans