【算法修炼-数组】leetcode70. 爬楼梯(js)

123 阅读1分钟

题目链接:leetcode-cn.com/problems/cl…

题目描述

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

示例 1:

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

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 12. 1 阶 + 23. 2 阶 + 1

解题

解题思路

  1. 找到通项公式递归,该方法比较慢,提交出现超时提醒
  2. 在第一个思路基础上,利用map存储中间结果(记忆化搜索)
/**
 * @param {number} n
 * @return {number}
 */
let map = new Map();
var climbStairs = function(n) {
    // 如果有数据,直接返回
    if (map.has(n)) {
        return map.get(n);
    }
    // 结果存储
    if (n === 1) {
        map.set(n ,1);
    } else if (n === 2) {
        map.set(n ,2);
    } else {
        map.set(n, climbStairs(n-1) + climbStairs(n-2))
    }
    return map.get(n);
};

总结

该题目属于递归套路题,最关键的是找到通用项。在这个基础上增加map存储优化算法时间复杂度。

算法修炼github:github.com/mengmengzp/…