LeetCodeEasy- [インタビューの質問10-II。カエルのジャンプ手順]

カエルは一度に1ステップ、または2ステップジャンプできます。カエルがnステップでジャンプするためのジャンプ方法の総数を見つけます。

答えは1e9 + 7(1000000007)を法とする必要があります。計算の初期結果が1000000008の場合、1を返します。

例1:

入力:n = 2
出力:2


例2:

入力:n = 7
出力:21


ヒント:

0 <= n <= 100

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

アイデア1:再帰(dp)

これは、再帰に従って直接計算できます。関係は、f(n)= f(n-1)+ f(n-2)です。したがって、f(1)、f(2)を知っている限り、次のようになります。計算できます。

書き込み1:

class Solution:
    def numWays(self, n: int) -> int:
        # f(n) = f(n-1) + f(n-2)
        # f(1) = 1, f(2) = 2
        if n == 0:
            return 1
        elif n == 1:
            return 1
        elif n == 2:
            return 2
        dp = [0] * (n+1)
        dp[1] = 1
        dp[2] = 2
        for i in range(3, n+1):
            dp[i] = (dp[i-1] + dp[i-2]) % 1000000007
        return dp[n]

2つ書く:

class Solution:
    def numWays(self, n: int) -> int:
        # f(n) = f(n-1) + f(n-2)
        # f(0) = 1, f(1) = 1, f(2) = 2
        a = 1 # n = 0
        b = 1 # n = 1
        for i in range(2,n+1):
            a, b = b, (a + b) % 1000000007
        return b

アイデア2:再帰(メモリ配列)

Pythonタイムアウト!

class Solution:
    def numWays(self, n: int) -> int:
        # f(n) = f(n-1) + f(n-2)
        # f(0) = 1, f(1) = 1, f(2) = 2
        self.dp = [0] * (n+1)
        self.dp[0] = 1
        self.dp[1] = 1
        return self.f(n)
    
    def f(self, n):
        if self.dp[n] != 0:
            return self.dp[n]
        return self.f(n-1) + self.f(n-2)

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105383789