DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

來刷 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 步的方法數
};

版權所有 © 2023 DOJO004

Deployed on Zeabur