假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。1 階 + 1 階 和 2 階
解題思路:
實現了兩種方法,但是第一種超出時間限制(。ì _ í。),因爲遞歸的時候方法實際計算了兩次。兩種方法都使用了動態規劃思想,比如對於爬10階樓梯,我們最後一步爬上第10階只會有兩種情況,一種是從9階樓梯爬1個臺階,一種是從8階臺階爬2兩個臺階上來。所以10階臺階問題可以劃分爲爬9階和8階兩個子問題,一直遞歸劃分到只剩2階(2種方法)和1階(一種方法)。
超出時間限制的代碼:
class Solution:
def climbStairs(self, n: int) -> int:
if n<=2:
if n==2:
return 2
else:
return 1
else:
return self.climbStairs(n-1)+self.climbStairs(n-2)
第二種方法(沒有重複計算):
class Solution:
def climbStairs(self, n: int) -> int:
m = [0,1,2]
for i in range(3,n+1):
m.append(m[i-1]+m[i-2])
return m[n]
時間與空間複雜度如下:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/probl...