來刷 LeetCode 吧! 21 70. Climbing Stairs
LeetCode
題目
總之就是要爬 n 步才能到頂樓。
一次可以走 1 or 2 樓梯,可以有幾種不同方式到達頂樓。
作答
典型的費波那契數列
n 的答案會等於 n - 1、n + 1 答案之和
var climbStairs = function (n) { if (n <= 3) return n; // 因為當 n <= 3 的時候答案剛好就是自己本身 return climbStairs(n - 1) + climbStairs(n - 2); };
但這樣寫… 超時了🥲
動態規劃
這種方法的時間複雜度是 O(n),因為只需一次循環完成計算。
空間複雜度是 O(1),因為只需要常數空間來存儲變量 a 和 b。這樣就能有效地解決問題並節省計算資源。
var climbStairs = function (n) { if (n <= 3) return n; // 當 n 小於等於 3 時,方法數就是 n let a = 2, b = 3; // 初始化前兩步的結果 for (let i = 4; i <= n; i++) { // 從第 4 步開始計算 let c = a + b; // 第 i 步的方法數是前兩步方法數之和 a = b; // 更新 a 和 b,使它們分別表示最新的兩步 b = c; } return b; // 最後 b 會是到達第 n 步的方法數 };