カエルは一度に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)