首页 > 其他分享 >代码随想录Day38-Leetcode509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

代码随想录Day38-Leetcode509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

时间:2023-04-27 17:37:24浏览次数:43  
标签:契数 顺序 爬楼梯 随想录 number cost let dp

咳咳, 因为找实习+摆导致时间被浪费大半;
先从动态规划学起吧,之前的慢慢补。

理论基础

动态规划的解题步骤
1.确定dp数组及对应下标的含义
2.确定dp的状态转移方程(递推公式)
3.确定dp数组如何初始化
4.确定dp遍历顺序
5.距离推导dp数组验证

509. 斐波那契数

题目链接:https://leetcode.cn/problems/fibonacci-number/
1.dp[i]含义为数列中第i个数
2.dp[i] = dp[i-1]+dp[i-2]
3.dp[0] = 0; dp[1] =1
4.从dp[2]开始顺序
5.显然

/**
 * @param {number} n
 * @return {number}
 */
//dp五步走
//1.dp数组含义
//2.dp公式
//3.dp初始化
//4.dp顺序
//5.dp验证
var fib = function(n) {
    //1.dp[i]含义为数列中第i个数
    //2.dp[i] = dp[i-1]+dp[i-2]
    //3.dp[0] = 0; dp[1] =1
    //4.从dp[2]开始顺序
    //5.显然
    if(n == 0){
        return 0
    }
    if(n == 1){
        return 1
    }
    let dp = new Array(n+1).fill(0)
    dp[0] = 0
    dp[1] = 1
    for(let i = 2; i<=n;i++){
        dp[i] = dp[i-1]+dp[i-2]
    }
    return dp[n]
};

//有坑, n并不是第n个数,而是第n+1个

70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/
1.dp[i]代表到第i+1级台阶的方法(i从0起)
2.dp[i] = dp[i-1]+dp[i-2]
3.dp[0] = 1; dp[1] = 2
4.顺序遍历
5.验证

/**
 * @param {number} n
 * @return {number}
 */
 //1.dp[i]代表到第i+1级台阶的方法(i从0起)
 //2.dp[i] = dp[i-1]+dp[i-2]
 //3.dp[0] = 1; dp[1] = 2
 //4.顺序遍历
//5. 验证
var climbStairs = function(n) {
    let dp = new Array(n)
    dp[0] = 1
    dp[1] = 2
    for(let i = 2; i<n;i++){
        dp[i] = dp[i-1] + dp[i-2]
    }
    //忽略越界
    return dp[n-1]
};

746. 使用最小花费爬楼梯

题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/
1.dp[i] 表示第i级(0)台阶的最低花费
2.dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
3.dp[0] = 0; dp[1] = 0
4.顺序遍历
5.验证,发现对"楼梯顶部"理解有问题

/**
 * @param {number[]} cost
 * @return {number}
 */

 //1.dp[i] 表示第i级(0)台阶的最低花费
 //2.dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
 //3.dp[0] = 0; dp[1] = 0
 //4.顺序遍历
var minCostClimbingStairs = function(cost) {
    let dp = new Array(cost.length+1).fill(0)
    dp[0] = 0
    dp[1] = 0
    for(let i = 2; i<=cost.length;i++){
        dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
    }
    return dp[cost.length]
};

//犯错: 楼梯顶部不是dp[cost.length-1]而是dp[cost.length]最后一节也要向上爬

标签:契数,顺序,爬楼梯,随想录,number,cost,let,dp
From: https://www.cnblogs.com/herbert118/p/17359533.html

相关文章

  • 剑指 Offer 10- I. 斐波那契数列
     分析:偷个懒,上次做的一样的题代码:1classSolution(object):2deffib(self,n):3"""4:typen:int5:rtype:int6"""7ifn<2:8returnn9f=[0foriinra......
  • day58 代码随想录 739. 每日温度 |
    请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0来代替。例如,给定一个列表temperatures=[73,74,75,71,69,72,76,73],你的输出应该是[1,1,4,2,1,1,0,0]。提示:气温......
  • 1137. 第 N 个泰波那契数
     分析;跟上道题一样,只不过变成了前三个状态的和直接给出代码,一次性过 代码:1classSolution(object):2deftribonacci(self,n):3"""4:typen:int5:rtype:int6"""7ifn==0:8return0......
  • 509. 斐波那契数
     分析:简单动态规划,状态转移已经给出直接写代码但是出了一个小问题,由于粗心,这题是从0算起,到n我给的范围没有到n修改提交通过代码:1classSolution(object):2deffib(self,n):3"""4:typen:int5:rtype:int6"""......
  • 代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集 、 202.
    ......
  • 剑指 Offer II 088. 爬楼梯的最少成本
    剑指OfferII088.爬楼梯的最少成本-力扣(LeetCode)分析:先思考建立状态。到达第i阶台阶时,花费最少体力为f[i]。再状态转移,到达i时有两种选择,从i-1或者i-2到i,两者取最小的再加上i需要花费的体力cost[i]。结果f[-1]最后得出状态转移:f[i]=min(f[i-1],f[i-1])+cost[i]......
  • 斐波那契数列
    斐波那契数列 公式:F(n)=F(n-1)+F(n-2)  步骤: 1、初始化:第0项为0,第1项为1if(n<=1){  returnn;} 2、设置参数,确保第二项也为1intres=0;inta=0;intb=1; 3、从2开始循环到n,把自己的值赋给下一项for(inti=2;i<=n;i++){  res=a+......
  • 03 | 写一个能产生斐波那契数列的range——惰性求值
    1.首先为了满足range概念的要求我们需要提供begin()和end()2.begin()和end()返回的应该是迭代器,注意这个地方两种可以返回两种不同类型(c++17后即可)3.为了满足迭代器概念的要求我们提供5个typedef,并根据std::input_iterator_tag类型决定我们要实现的“解引用函数”,......
  • 斐波拉契数列
    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 先写出来前几个月的兔子数,分别是1、1、2、3、5、8、13、21、34......就是这样一组数列,第三个数是前两个数的和,也就是n=(n-1)+(n-2) ......
  • 代码随想录算法训练营第四天 | 24.两两交换链表
     ......