day32--509. 斐波那契数+ 70. 爬楼梯+ 746. 使用最小花费爬楼梯

一、509. 斐波那契数

题目链接:https://leetcode.cn/problems/binary-search/description/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

1.1 初见思路

  1. 动规五部曲

1.2 具体实现

class Solution {
    public int fib(int n) {
        if (n <= 1) return n;
        int[] dp = new int[n+1];
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}

1.3 重难点

二、 70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/
文章讲解:https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频讲解:https://www.bilibili.com/video/BV17h411h7UH

2.1 初见思路

  1. 动规五部曲,一定要做这个步骤
  2. 确认dp[i]的含义:爬到第i层楼梯时有多少种方案
  3. 确定递归公式:dp[i] = dp[i - 1] + dp[i - 2]
  4. dp数组如何初始化: dp[1]=1,dp[2]=2 -->所以dp[0]=1
  5. 确定遍历顺序
  6. 举例推导dp数组

2.2 具体实现

class Solution {
    public int climbStairs(int n) {
        if(n==1){
            return n;
        }
        int[] dp = new int[n+1];
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}

2.3 重难点

  • 题目不难,但是要使用动规五部曲来分析,目的是掌握题目不难,但是要使用动规五部曲来分析,目的是掌握动规五部曲的分析过程

三、 746. 使用最小花费爬楼梯

题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/
文章讲解:https://programmercarl.com/0746.%E4%BD%BF%E7%94%A8%E6%9C%80%E5%B0%8F%E8%8A%B1%E8%B4%B9%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频讲解:https://www.bilibili.com/video/BV16G411c7yZ/

3.1 初见思路

  1. 怀疑是否存在情况,前面选择的局部最小会导致仍然要走一遍,反而花费更多,如[1,10,1,1,2,10,1,1]这种情况
  2. 使用动规五部曲来分析
  3. 确认dp[i]的含义:到达第i层楼梯花费的最少金额
  4. 确认递归公式:
    1. 因为每次只能爬1~2个台阶,所以肯定是取 i-1 和 i-2 台阶的已花费金额加上当前台阶价格 的最小值
    2. dp[i]=Min(dp[i-1]+cost[i-1] , dp[i-2]+cost[i-2])
  5. 确认初始值
    1. dp[0]=cost[0],dp[1]=cost[1]------错误的!!
    2. 本题应该是跳到第1和2台阶是没有花费的。
  6. 确认遍历顺序
  7. 模拟

3.2 具体实现

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n=cost.length;
        int[] dp = new int[n];
        dp[0]=0;
        dp[1]=0;
        for(int i=2;i<n;i++){
            dp[i]=Math.min(dp[i-1]+cost[i-1] , dp[i-2]+cost[i-2]);
        }
        return Math.min(dp[n-1]+cost[n-1], dp[n-2]+cost[n-2]);
    }
}

3.3 重难点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值