动态规划基础题: 509. 斐波那契数 + 70. 爬楼梯

509. 斐波那契数

题目链接

1、确定dp数组的含义
dp[i]代表第i个数的斐波那契数,dp是一个长度为n的数组,需要把每个数对应的斐波那契数存进去。
2、状态转移方程
F(n) = F(n - 1) + F(n - 2)
3、初始化dp数组
F(0) = 0,F(1) = 1
4、遍历顺序
dp[i]是依赖 dp[i - 1] 和 dp[i - 2],所以遍历顺序是从前往后

var fib = function(n) {
    // 1、定义dp数组,数组是一个长为n的数组,用来存放0-n之间每个数的斐波那契数
    let dp = new Array(n);

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

    // 3、开始从前往后遍历
    for(let i=2;i<=n;i++){
        // 状态转移方程
        dp[i] = dp[i-1] + dp[i-2];
    }
    // 返回的是第n个数的结果
    return dp[n];
};

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、付费专栏及课程。

余额充值