70.爬楼梯


70.爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

题解:

class Solution {
    private int twoStep = 0;
    private int oneStep = 0;
    private HashMap<Integer, Integer> map = new HashMap<>();
    private int result = 0;
    public int climbStairs(int n) {
        if (n == 1 || n == 0) {
            map.put(0, 1);
            map.put(1, 1);
            return 1;
        }
        // 如果map中已经有保存过的值就取出
        if (map.containsKey(n - 2)) {
            twoStep = map.get(n - 2);
        }
        if (map.containsKey(n - 1)) {
            oneStep = map.get(n - 1);
        }

        if (twoStep + oneStep != 0) {
            map.put(n, twoStep + oneStep);
            return twoStep + oneStep;
        } else {
            result = climbStairs(n - 2) + climbStairs(n - 1);
            map.put(n, result);
            return result;
        }
    }
}

文章作者: Feliks
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Feliks !
评论
  目录