1. 程式人生 > >LeetCode刷題記錄——第七十題(爬樓梯)

LeetCode刷題記錄——第七十題(爬樓梯)

題目描述

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。

  1. 1 階 + 1 階
  2. 2 階

示例 2:

輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。

  1. 1 階 + 1 階 + 1 階
  2. 1 階 + 2 階
  3. 2 階 + 1 階

思路分析

  • 因為只可以爬一個或者兩個臺階,相當於上第k個臺階時只可能是從第k-1和第k-2個臺階爬上來,所以可能的情況有兩種:
    1. 到達k-1臺階後,爬上一級
    2. 到達k-2臺階後,爬上兩級
  • 設m種方法到達k-2級臺階,n種方法到達k-1級臺階。所以到達k級有m+n種方法。

程式碼實現

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n <= 2:
            return n
        temp = [0,1,2]      #其實是斐波那契數列
        for i in range(3
,n+1): temp.append(temp[-1]+temp[-2]) return temp[-1]