首页 > 其他分享 >day38

day38

时间:2023-02-22 00:14:15浏览次数:35  
标签:遍历 推导 day38 int cost 数组 dp

1、动规理论基础

  1. 动态规划中每一个状态一定是由上一个状态推导出来的,而贪心是局部直接选最优的。
  2. 解题步骤
    1. 确定dp数组(dp table)以及下标的含义
    2. 确定递推公式
    3. dp数组如何初始化
    4. 确定遍历顺序
    5. 举例推导dp数组

2、leetcode509 斐波那契数

  1. 思路

    1. 确定dp数组(dp table)以及下标的含义

      • dp[i] : 第i个数的斐波那契数值
    2. 确定递推公式

      • dp[i] = dp[i-1] + dp[i-2]
    3. dp数组如何初始化

      • dp[0] = 0

      • dp[1] = 1

    4. 确定遍历顺序

      • 后面的数值由前面的数值推导而得 ====》 从前往后遍历
    5. 举例推导dp数组

  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];
        
        }
    }
    
  3. 递归法

    class Solution {
        public int fib(int n) {
            if(n <= 1) {
                return n;
            }
            return fib(n-1) + fib(n-2);
        }
    }
    

3、leetcode70 爬楼梯

  1. 思路

    1. 确定dp数组(dp table)以及下标的含义

      • dp[i] : 爬到第i阶楼梯的方法数量
    2. 确定递推公式

      • dp[i] = dp[i-1] + dp[i-2]

      • 因为每次可以爬1或2个台阶 ===》因此,第i阶可从第i-1阶爬1阶到达,也可从第i-2阶爬2阶到达

      • 因此,爬到第i阶楼梯的方法数量 = 爬到第i-1阶楼梯的方法数量 + 爬到第i-2阶楼梯的方法数量

    3. dp数组如何初始化

      • dp[1] = 1

      • dp[2] = 2

    4. 确定遍历顺序

      • 后面的数值由前面的数值推导而得 ====》 从前往后遍历
    5. 举例推导dp数组

  2. 代码

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

4、leetcode746 使用最小花费爬楼梯

  1. 思路

    1. 确定dp数组(dp table)以及下标的含义

      • dp[i] : 爬到第i阶需要的最低花费
      • 已知cost[i] :从第i阶向上爬需要支付的费用
      • 总阶梯数 = cost[].length
    2. 确定递推公式

      • dp[i] = min(dp[i-1]+cost[i-1] , dp[i-2]+cost[i-2] )
      • 因为每次可以爬1或2个台阶 ===》因此,第i阶可从第i-1阶爬1阶到达,也可从第i-2阶爬2阶到达【先到达i-1阶,再从第i-1阶向上爬】【dp[i-1] + cost[i-1]】
    3. dp数组如何初始化

      • 已知可从下标为 0 或下标为 1 的台阶开始爬楼梯。 ==》达到下标为 0 或下标为 1 的台阶不要花费

      • dp[0] = 0

      • dp[1] = 0

    4. 确定遍历顺序

      • 后面的数值由前面的数值推导而得 ====》 从前往后遍历
    5. 举例推导dp数组

  2. 代码

    class Solution {
        public int minCostClimbingStairs(int[] cost) {
            int[] dp = new int[cost.length + 1];
    
            dp[0] = 0;
            dp[1] = 0;
    
            for(int 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];
    
        }
    }
    

标签:遍历,推导,day38,int,cost,数组,dp
From: https://www.cnblogs.com/hzj-bolg/p/17142964.html

相关文章

  • day38_0700.二叉搜索树中的搜索
    0700.二叉搜索树中的搜索classSolution{public:TreeNode*searchBST(TreeNode*root,intval){if(root==NULL)returnNULL;if(root-......
  • 代码随想录Day38
    LeetCode450.删除二叉搜索树中的节点给定一个二叉搜索树的根节点root和一个值key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有......
  • day38 操纵节点和表单
    更新dom节点写一些div标签 <divid="id1">​</div><h1>标题</h1><divid="father"><pid="p1">p1</p><pclass="p2">p2</p><p>p3</p></......
  • 进入python的世界_day38_数据库——mysql约束条件、表关系
    一、字段约束条件1.无负号​ unsignedcreatetablet(idintunsigned);#不能添加负数2.零填充​ zerofillcreatetablet(idintzerofill);#填入得数据展......
  • 代码随想录day38 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
    509.斐波那契数题目|文章思路确实数组及其含义确定递推公式数组的初始化条件确定遍历顺序举例推导dp数组实现点击查看代码classSolution{public:in......
  • 前端Node.js-Day38
    mysql操作数据库查询语句:使用select查询,得到的结果是数组形式。db.query('select*fromseven',(err,res)=>{//查询失败if(err)returnconsole.log('......
  • 2022-08-30 day38 第一小组 王鸣赫
    目录HttpServletRequest//请求HttpServletResponse//响应路径匹配servlet加载时期常见传参有2种:GET和POST区别获取一个key对应的多个值请求转发作用域其他方法Respo......
  • Day38注解和反射
    注解Annotation的作用:不是程序本身,可以对程序作出解释(这一点和注释(comment)没什么区别)。可以被其他程序(如:编译器等)读取。Annotation的格式:注解是以"@注释名"在代......