LeetCode 面試題10- II. 青蛙跳臺階問題【劍指Offer】【Easy】【Python】【動態規劃】
問題
一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計算初始結果爲:1000000008,請返回 1。
示例 1:
輸入:n = 2
輸出:2
示例 2:
輸入:n = 7
輸出:21
提示:
0 <= n <= 100
注意:本題與主站 70 題 相同。
思路
動態規劃
初始條件和斐波那契數列有點區別:dp_0 = 1,dp_1 = 1。
fib(n) = fib(n - 1) + fib(n - 2)
注意,fib(n)會越界,所以最好是:
fib(n) % 1000000007 = (fib(n - 1) % 1000000007 + fib(n - 2) % 1000000007) % 1000000007
但是因爲 Python 中整形數字的大小限制取決計算機的內存(可理解爲無限大),因此可不考慮大數越界問題。
時間複雜度: O(n)
空間複雜度: O(1)
Python3代碼
class Solution:
def numWays(self, n: int) -> int:
# 初始條件和斐波那契數列有區別
dp_0, dp_1 = 1, 1
for _ in range(n):
dp_0, dp_1 = dp_1, dp_0 + dp_1
return dp_0 % 1000000007