70. 爬楼梯 JavaScript实现

70. 爬楼梯

题目链接

一、动态规划

其实就是最后的结果就是509.斐波那契数 ,只不过dp[0]的值不一样而已。
1、确定dp数组以及下标的含义
定义dp[i]为爬上第 i 级台阶有多少种方案。对于不同的n有不同的值。

2、确定状态转移方程
本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于 2 部分之和
爬上 n-1 阶楼梯的方法数量。因为再爬1阶就能到第n阶
爬上 n-2阶楼梯的方法数量,因为再爬2阶就能到第n阶
dp[i] = dp[i-1] + dp[i-2]。

在这里插入图片描述
3、初始化条件
i = 0 级开始爬的,所以从第 0 级爬到第 0 级我们可以看作只有一种方案,即 dp(0)=1;
i = 1 代表从第 0 级到第 1 级也只有一种方案,即爬一级,dp(1) = 1。

4、遍历顺序
从前往后进行遍历

5、返回值
n阶台阶有多少种方案,就是dp[n]

二、代码实现

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    // 1、dp数组
    const dp = new Array(n);

    // 2、初始化状态
    dp[0] = 1,dp[1] = 1;

    // 3、从第二层开始遍历,因为只有到第二层台阶才有两种方案。
    // 一直遍历,得到dp数组每个下标的值。
    for(let i=2;i<=n;i++){
        dp[i] = dp[i-1] + dp[i-2];
    }
    // 返回的是爬上第n个台阶的方案数
    return dp[n];
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值