70.爬樓梯——python版(做題解析)
阿新 • • 發佈:2021-03-07
題目:
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
- 1 階 + 1 階
- 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],如果使用列表的話,就會顯示超出原來的長度。
處理結果:
遞迴法不能用也是很鬱悶
來源:力扣(LeetCode)