1. 程式人生 > 其它 >70.爬樓梯——python版(做題解析)

70.爬樓梯——python版(做題解析)

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

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

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

示例 1

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。

  1. 1 階 + 1 階
  2. 2 階
class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        stair = {}
        stair[
1] = 1 stair[2] = 2 for i in range(3, n+1): stair[i] = stair[i-1] + stair[i-2] return stair[n]

解題思路:這裡我第一想到的是用遞迴的方法來解決這道題目,但是經過多次嘗試還是顯示結果超時。所以我只能調轉思路將空間複雜程度從原來的O(n)變為O(1),最終發現能夠通過。

重點解析
1.stair = {}:這裡是為了申請空的字典。申請字典而不是列表的原因是在後續迴圈語句中,會使用到字典。而字典中儲存的其實是未知的引數stair[i-1] + stair[i-2],如果使用列表的話,就會顯示超出原來的長度。

2.range(3, n+1):range的範圍前閉後開,所以最後一階樓梯需要+1
處理結果
在這裡插入圖片描述
遞迴法不能用也是很鬱悶

來源:力扣(LeetCode)