Easy 70 - Climbing Stairs
In this blog I will share a solution to the Climbing Stairs problem.
題目連結
難度:Easy
你正在爬樓梯,需要 n 步才能到達頂部。每次你可以爬 1 或 2 個台階,求有多少種不同的方法可以爬到樓頂?example:
限制
- 1 <= n <= 45
Dynamic Programming
Fibonacci Sequence
解題思路
這是一個經典的動態規劃問題,實際上就是斐波那契數列的應用(Fibonacci Sequence)
核心概念
- 到達每一階的方法數
- 可以從前一階爬 1 步到達
- 可以從前兩階爬 2 步到達
- 因此,到達當前階的方法數 = 到達前一階的方法數 + 到達前兩階的方法數
- 基礎案例
- n = 1:只有一種方法(爬 1 階)
- n = 2:有兩種方法(爬 1+1 或直接爬 2)
解題步驟
- 初始判斷
- 檢查是否為基礎案例 (n ≤ 2)
- 如果是,直接返回 n
- 初始化狀態
- 設定前兩階的方法數
- n = 1 時為 1 種方法
- n = 2 時為 2 種方法
- 動態規劃計算
- 從第 3 階開始遍歷
- 每一階的方法數 = 前一階方法數 + 前兩階方法數
- 更新狀態,準備計算下一階
- 返回結果
- 返回最後計算出的方法數
- 即為到達目標階數的總方法數
狀態轉換說明
程式碼實現
程式碼說明
- 基礎案例處理
- 當階數 ≤ 2 時,直接返回階數值
- n = 1 返回 1(一種方法)
- n = 2 返回 2(兩種方法)
- 狀態追蹤
twoStepsBefore
:前兩階的方法數oneStepBefore
:前一階的方法數
- 現代 JavaScript 特性
- 使用解構賦值簡化變數交換
- 使用 Array.from 替代傳統迴圈
- 採用箭頭函數提高可讀性
複雜度分析
- 時間複雜度:O(n)
- 需要計算從第 3 階到第 n 階
- 每階只計算一次
- 空間複雜度:O(1)
- 只需要兩個變數儲存狀態
- 不需要額外的陣列空間