Leetcode前端必会系列:爬楼梯

95 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

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

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

 

示例 1:

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

示例 2:

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

分析

根据题目的分析,我们如何快速的完成爬楼梯题目?通过分析我们可以看到爬楼梯本质是数学规律的一道题目,每次楼梯的数目都是依赖于前两次爬楼梯的结果,因此采用dp方程组的设计可以轻松解决

  1. 找出题目的规律,初始化dp方程组dp[0]和dp[1]
  2. 根据方程组dp[i]=dp[i-1]+dp[i-2]轻松解决
  3. 返回目标楼梯的结果

解答

```
/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    let res = []
  res[1] = 1
  res[2] = 2
  for(let i=3;i<=n;i++) res[i] = res[i-1]+res[i-2]
  return res[n]
};
```
 

整体只需要整理出题目的数学规律就可以轻松的解决问题,算法的时间复杂度是o(n)空间复杂度也是o(n)

总结

通过对爬楼梯题目的讲解,大家学到了进行问题的解决。通过动态规划方程组巧妙计算可以优雅的在低时间和空间复杂度下完成任务。