LeetCode | 面試題10- II. 青蛙跳臺階問題【劍指Offer】【Python】

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

GitHub鏈接

Python

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章