当前位置: 首页 > news >正文

代码随想录第38天|完全背包

322.零钱兑换

视频讲解:动态规划之完全背包,装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换_哔哩哔哩_bilibili

代码随想录

第一想法:

经过自己画图之后,如下:

  • dp[ j ]含义 :装满 j 所需的最少硬币数为 dp [ j ]
  • 递推公式 : dp [ j ] =  min (dp[ j ] ,dp [ j - coins[i] ]+1)
  • 初始化 :
    • dp [ 0 ] = 0;
    • 非零元素 全部初始化为 最大值
  • 遍历顺序
    • 这是一个组合问题,所以先遍历物品,再遍历背包
  • 若 dp[ amount] ==Max || dp[amount] ==0 ,返回-1

代码:

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0] = 0;for (int i = 0; i < coins.length; i++) {for (int j = coins[i]; j <= amount; j++) {if(dp[j-coins[i]]!=Integer.MAX_VALUE){//只有dp[j-coins[i]]不是初始最大值时,才有选择的必要否则就是。Max+1溢出直接变成最小值。dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return dp[amount]==Integer.MAX_VALUE?-1:dp[amount];}
}

279.完全平方数

视频讲解:动态规划之完全背包,换汤不换药!| LeetCode:279.完全平方数_哔哩哔哩_bilibili

代码随想录

 第一想法:

这道题和上面的题是一样的。但是特别注意两种写法是不一样的。

代码:

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0] = 0;for (int j = 1; j <= n; j++) {for (int i = 1; i * i <= j; i++) {dp[j] = Math.min(dp[j],dp[j-i*i]+1);}}return dp[n]==Integer.MAX_VALUE?-1:dp[n];}
}

139.单词拆分

视频讲解:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili

代码随想录

代码随想录

  • dp[j]:字符串长度为j时,dp[j] = true,表示可以被拆分成多个在字典中出现的单词
  • 递推公式: if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。
  • 初始化 : dp[0] = true
  • 遍历顺序: 排序问题,先遍历背包,再遍历物品

 代码

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length()+1];dp[0] = true;for (int i = 1; i <= s.length(); i++) {for (String word : wordDict) {int length = word.length();if(i>=length&&dp[i-length]&&word.equals(s.substring(i-length,i))){dp[i]=true;break;}}}return dp[s.length()];}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mybatis常见面试问题
  • Cannot connect to the Docker daemon at unix:///var/run/docker.sock. 问题解决
  • Docker最佳实践进阶(一):Dockerfile介绍使用
  • 详解贪心算法
  • CANopen 控制多台设备的支持能力与定制方案评估
  • Cisco交换机SSH使用RSA公钥免密登录(IOS与Nexus,服务器以RHEL8为例)
  • Java线程池练习
  • Visual Studio Code安装与C/C++语言运行(下)
  • 1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)
  • 数据结构---双向循环链表
  • elementplus 二次封装 select 自定义指令上拉加载更多 完美解决 多次接口调用 重新加载数据多次调用数据!!!
  • LeetCode-字母异位词分组
  • 用R语言进行数据类型的检查和基础转换
  • 如果将一个对象赋值给 ref,那么这个对象将通过 reactive() 转为具有深层次响应式的对象。这也意味着如果对象中包含了嵌套的 ref,它们将被深层地解
  • rk3568-linux sdk编译update.img时以当前时间进行命名
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Javascript Math对象和Date对象常用方法详解
  • Laravel5.4 Queues队列学习
  • leetcode46 Permutation 排列组合
  • Meteor的表单提交:Form
  • PHP 7 修改了什么呢 -- 2
  • 对超线程几个不同角度的解释
  • - 概述 - 《设计模式(极简c++版)》
  • 跨域
  • 三栏布局总结
  • 听说你叫Java(二)–Servlet请求
  • 协程
  • 一份游戏开发学习路线
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 移动端 h5开发相关内容总结(三)
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (LeetCode 49)Anagrams
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十三)Maven插件解析运行机制
  • (四)c52学习之旅-流水LED灯
  • (转)visual stdio 书签功能介绍
  • (转)详解PHP处理密码的几种方式
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .“空心村”成因分析及解决对策122344
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core docker部署教程和细节问题
  • .Net Core和.Net Standard直观理解
  • .NET Core跨平台微服务学习资源
  • .net web项目 调用webService
  • .NET 指南:抽象化实现的基类
  • .Net各种迷惑命名解释
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @AliasFor 使用