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

代码随想录Day39|322. 零钱兑换、279.完全平方数、139.单词拆分

322. 零钱兑换

        dp[j]:装满容量为j的背包的最小元素个数。

        递推公式:dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);

        初始化:dp[0] = 0,因为要取最小值,所以待更新的区域都初始化成最大值。

        遍历顺序:因为不强调组合还是排列,只是求元素个数。

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];int max = Integer.MAX_VALUE -1;for(int i = 1; i<=amount;i++){dp[i] = max;}for(int i = 0; i <coins.length; i++){for(int j = coins[i]; j<=amount; j++){if(dp[j-coins[i]] != max){dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return max == dp[amount]? -1:dp[amount];}
}

279.完全平方数

这题是自己用了个类似于查表法的思路,生成了个平方数的数组。看了题解后觉得自己很呆。

        dp[j]:装满容量为j的背包的最小元素个数。

        递推公式:dp[j] = Math.min(dp[j],dp[j-nums[i]]+1);

        初始化:dp[0] = 0,因为要取最小值,所以待更新的区域都初始化成最大值。

        遍历顺序:因为不强调组合还是排列,只是求元素个数。

class Solution {public int numSquares(int n) {int[] nums = new int[101];for(int i = 1; i <nums.length;i++){nums[i] = i*i;}int[] dp = new int[n+1];int max = Integer.MAX_VALUE;for(int i = 1; i <=n; i++){dp[i] = max;}for(int i = 1; i < nums.length; i++){for(int j = 1; j<=n; j++){if(j - nums[i] >=0){dp[j] = Math.min(dp[j],dp[j-nums[i]] + 1);}}}return dp[n];}
}

139.单词拆分

个人觉得这题不太好理解,但是好像其他同学觉得不难。

dp[i] : 背包为i容量,这里应该必须是从字符串的[0,i],能用字典单词组合成功为true,否则为false。

递推公式:dp[i] = set.contains(substring[j,i]) && dp[j]

这里dp[j]是加新单词之前的状态,如果新单词能找到,新单词之前的字符串也能找到,才输出dp[i]=true。

注意要判断下,再进入递归公式,有可能dp[i]本来已经为true了,但是新截取的字符串构不成单词,又给赋值成false了,所以不要每次都赋值。只要改过一次为true了就说明[0,i]是可以组合成功的。

遍历顺序:组合数,外层遍历背包。

初始化:dp[0] = true,其他都是false

class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> set = new HashSet<>(wordDict);boolean[] dp = new boolean[s.length() +1];dp[0] = true;//排列,外层遍历背包for(int i = 1; i <=s.length(); i++){for(int j =0;i > j;j++){if(set.contains(s.substring(j,i)) && dp[j]){dp[i]= true;}}}return dp[s.length()];}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flask中的上下文(Context)
  • Mysql 主从复制、读写分离
  • 【网络安全】Exif 数据储存型XSS
  • JS排序算法--快排、归并、冒泡、选择、插入
  • 谈谈ES搜索引擎
  • 云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!
  • 线性代数|机器学习-P36在图中找聚类
  • 计算机网络-VRRP切换与回切过程
  • muduo 网络库学习项目引入 Boost 依赖
  • “设计模式双剑合璧:工厂模式与策略模式在支付系统中的完美结合”
  • JLabel设置字体大小颜色背景色
  • 数据结构与算法03 顺序表+链表
  • 数字化转型专家讲师培训师唐兴通中欧国际工商学院数字化转型战略与实现路径AIGC人工智能数字化战略数字商业模式创新
  • Docker 详解及详细配置讲解
  • Linux安装Jenkins详细步骤分解
  • 【5+】跨webview多页面 触发事件(二)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2017-08-04 前端日报
  • CentOS 7 修改主机名
  • const let
  • ES6简单总结(搭配简单的讲解和小案例)
  • exif信息对照
  • GraphQL学习过程应该是这样的
  • IP路由与转发
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Otto开发初探——微服务依赖管理新利器
  • Redis在Web项目中的应用与实践
  • Webpack 4 学习01(基础配置)
  • 半理解系列--Promise的进化史
  • 成为一名优秀的Developer的书单
  • 高程读书笔记 第六章 面向对象程序设计
  • 计算机在识别图像时“看到”了什么?
  • 前端js -- this指向总结。
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一些关于Rust在2019年的思考
  • PostgreSQL之连接数修改
  • 阿里云ACE认证之理解CDN技术
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #pragma 指令
  • (java)关于Thread的挂起和恢复
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计高校学生选课系统
  • (回溯) LeetCode 40. 组合总和II
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (万字长文)Spring的核心知识尽揽其中
  • (杂交版)植物大战僵尸
  • (转)Linux整合apache和tomcat构建Web服务器