題目來源:https://leetcode-cn.com/problems/climbing-stairspython
假設你正在爬樓梯。須要 n 階你才能到達樓頂。segmentfault
每次你能夠爬 1 或 2 個臺階。你有多少種不一樣的方法能夠爬到樓頂呢?微信
注意:給定 n 是一個正整數。app
示例 1:spa
輸入: 2 輸出: 2 解釋: 有兩種方法能夠爬到樓頂。 1. 1 階 + 1 階 2. 2 階
示例 2:code
輸入: 3 輸出: 3 解釋: 有三種方法能夠爬到樓頂。 1. 1 階 + 1 階 + 1 階 2. 1 階 + 2 階 3. 2 階 + 1 階
例如爬 i 階樓梯,由兩種方案:blog
class Solution: def climbStairs(self, n: int) -> int: '''計算爬樓梯的方法數 Args: n: 表示樓梯的臺階 Returns: 返回爬 n 階樓梯的方法數 ''' # 若是臺階數 n 小於 2,直接返回 n if n <= 2: return n # 將問題分解爲多個子問題 # 爬 i 階樓梯,可分解爲爬 (i-1) 和 (i-2) 的方法總和 # 將列表索引定義爲臺階數,n 爲 0 時,這裏直接給 None # 只賦值給索引爲 1,2 的兩個元素 dp = [None, 1, 2] for i in range(3, n+1): dp.append(dp[i-1] + dp[i-2]) return dp[n]
class Solution: def climbStairs(self, n: int) -> int: '''計算爬樓梯的方法數 Args: n: 表示樓梯的臺階 Returns: 返回爬 n 階樓梯的方法數 ''' # 若是臺階數 n 小於 2,直接返回 n if n <= 2: return n # 將問題分解爲多個子問題 # 爬 i 階樓梯,可分解爲爬 (i-1) 和 (i-2) 的方法總和 # 便是求第一項爲 1,第二項爲 2 的第 n 個斐波那契數 a, b = 1, 2 for _ in range(3, n+1): a, b = b, b+a return b
以上就是本篇的主要內容
題外話:越是恐慌,越是謠言四起。目前儘可能不出門,照顧好本身,就是對社會最大的貢獻。 歡迎關注微信公衆號《書所集錄》