爬樓梯(Python3)

假設你正在爬樓梯。需要 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]

時間與空間複雜度如下:
image.png

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/probl...

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