1. 程式人生 > 其它 >牛客提高組模擬4 快速訪問——一道樹剖“板子”題

牛客提高組模擬4 快速訪問——一道樹剖“板子”題

假設你正在爬樓梯。需要 n階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1. 1 階 + 1 階
2. 2 階
示例 2:

輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1. 1 階 + 1 階 + 1 階
2. 1 階 + 2 階
3. 2 階 + 1 階

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/climbing-stairs
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路

第一個暴力遞迴,超時

增加@functools.lru_cache()記憶化搜尋解決

優化使用dp,在121.買賣股票的最佳時機裡學會了一點基本動態規劃,用到這裡

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        dp=[0]*(n+1)
        dp[0]=dp[1]=1
        for i in range(2,n+1):
            dp[i]=dp[i-1]+dp[i-2]
        return
dp[-1]

還看到了更簡的方法

# f(n)只依賴於f(n-1)和f(n-2),只需要兩項就足夠了
def climbStairs(self, n: int) -> int:
    a = b = 1
    for i in range(2, n + 1):
        a, b = b, a + b
    return b

作者:lu-nan-2
連結:https://leetcode-cn.com/problems/climbing-stairs/solution/zhi-xin-hua-shi-pa-lou-ti-zhi-cong-bao-l-lo1t/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。