問題
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。(1 階 + 1 階)、(2 階)
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。(1 階 + 1 階 + 1 階)、(1 階 + 2 階)、(2 階 + 1 階)
思路
運用到斐波那契數列求解。
(1)首先,要列舉出兩個例外的樓梯,n=1,與n=2
(2)當n≥3時,第n階梯子的爬樓梯方法由兩部分組成,第一部分是在n-1的梯子上爬一個臺階,第二部分是在n-2的梯子上爬兩個臺階。所以有dp[n] = dp[n-1] + dp[n-2]。
代碼
class classname(object):
def __init__(self):
pass
def climbStairs(self, n):
if n == 1:
return 1
if n == 2:
return 2
first = 1; second = 2
for i in range(n-2):
temp = second
second = first + second
first = temp
return second
if __name__ == '__main__':
s = classname()
r = s.climbStairs(35)
print(r)
相關知識
學習鏈接:https://wenku.baidu.com/view/d680efcacd22bcd126fff705cc17552707225efe.htmls