作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn854d/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

    1. 示例 1
    2. 输入: 2
    3. 输出: 2
    4. 解释: 有两种方法可以爬到楼顶。
    5. 1 + 1
    6. 2
    7. 示例 2
    8. 输入: 3
    9. 输出: 3
    10. 解释: 有三种方法可以爬到楼顶。
    11. 1 + 1 + 1
    12. 1 + 2
    13. 2 + 1

    本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于 2 部分之和
    爬上 n−1 阶楼梯的方法数量。因为再爬1阶就能到第n阶
    爬上 n−2 阶楼梯的方法数量,因为再爬2阶就能到第n阶
    所以我们得到公式 爬楼梯 - 图1
    同时需要初始化 爬楼梯 - 图2
    时间复杂度:爬楼梯 - 图3

    1. /**
    2. * @param {number} n
    3. * @return {number}
    4. */
    5. var climbStairs = function(n) {
    6. const dp = [];
    7. dp[0] = 1;
    8. dp[1] = 1;
    9. for(let i = 2; i <= n; i++) {
    10. dp[i] = dp[i - 1] + dp[i - 2];
    11. }
    12. return dp[n];
    13. };

    参考:
    https://leetcode-cn.com/problems/climbing-stairs/solution/hua-jie-suan-fa-70-pa-lou-ti-by-guanpengchn/