申し出を受賞 - n番目のフィボナッチ - カエル石蹴り

質問自体は難しくありませんが、考えを必要とします。

フィボナッチ: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

 

公開された45元の記事 ウォンの賞賛1 ビュー3351

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104708687
おすすめ