解题步骤

  1. 定义子问题:f(n) = f(n - 1) + f(n - 2)
  2. 反复执行:从 2 循环到 n ,执行上述公式

通过动态规划的方式实现

  • 时间复杂度:O (n)
  • 空间复杂度:O (n)

    1. function climbStairs(n) {
    2. if (n < 2) return 1;
    3. const dp = [1, 1];
    4. for (let i = 2; i <= n; i++) {
    5. dp[i] = dp[i - 1] + dp[i - 2];
    6. }
    7. return dp[n];
    8. }

代码中存在一个循环,所以时间复杂度是 O (n)。而空间复杂度也是 O (n),因为使用了数组存储数据,数据会随着 n 增大而增大。

通过动态规划的方式实现(优化后)

  • 时间复杂度:O (n)
  • 空间复杂度:O (1)

    1. function climbStairs(n) {
    2. if (n < 2) return 1;
    3. let dp0 = 1;
    4. let dp1 = 1;
    5. for (let i = 2; i <= n; i++) {
    6. const temp = dp0;
    7. dp0 = dp1;
    8. dp1 = dp1 + temp;
    9. }
    10. return dp1;
    11. }

代码中存在一个循环,所以时间复杂度是 O (n)。而空间复杂度是 O (1),因为把数据存储的方式改成了单个变量的存储方式。