爬楼梯:一次可走 1 或 2 阶,n 阶共有多少种走法?用 DP 并优化空间。

dp[i] = dp[i-1] + dp[i-2](第 i 阶要么从 i-1 跨 1 步,要么从 i-2 跨 2 步),本质斐波那契。

// 自底向上 + 滚动变量,空间 O(1)
function climbStairs(n) {
  let a = 1, b = 1           // dp[0], dp[1]
  for (let i = 2; i <= n; i++) {
    [a, b] = [b, a + b]
  }
  return b
}

同分类其他题目