# 70. 爬楼梯

// 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
  const map = new Map();
  function rec(n) {
    if (n < 2) return 1;
    const prev1 = n - 1;
    const prev2 = n - 2;
    let res1 = map.get(prev1);
    let res2 = map.get(prev2);

    if (!res1) {
      res1 = rec(prev1);
      map.set(prev1, res1);
    }
    if (!res2) {
      res2 = rec(prev2);
      map.set(prev2, res2);
    }

    return res1 + res2;
  }
  return rec(n);
};

// console.log(climbStairs(2)); // 2
// 解释:有两种方法可以爬到楼顶。
// 1. 1 阶 + 1 阶
// 2. 2 阶

// console.log(climbStairs(3)); // 3
// 解释:有三种方法可以爬到楼顶。
// 1. 1 阶 + 1 阶 + 1 阶
// 2. 1 阶 + 2 阶
// 3. 2 阶 + 1 阶

console.log(climbStairs(45)); // 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Last Updated: 7/4/2023, 6:50:39 PM