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

Leetcode 322. 零钱兑换(完全背包)

  • Leetcode 322. 零钱兑换(完全背包)
  • 题目
    • 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
    • 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
    • 你可以认为每种硬币的数量是无限的。
    • 1 <= coins.length <= 12
    • 1 <= coins[i] <= 2^31 - 1
    • 0 <= amount <= 10^4
  • 解法
    • 动态规划之完全背包:
    • 定义一维数组 dp,其中 dp[i] 表示组成总金额 i 所需的最少硬币数
    • 初始化 dp 数组,dp[0] 为 0,表示组成金额 0 需要 0 个硬币,dp[1…amount] 初始化为极大值,表示当前无法组成该总金额
    • 遍历硬币数组 coins,对于每种面额的硬币,遍历总金额范围内可以添加该硬币的金额下标。即 dp[j] 不为极大值,说明可以组成 j + coins[i] 金额,此时转移方程为:dp[j + coins[i]] = Math.min(dp[j + coins[i]], dp[j] + 1)
    • 遍历结束后,dp[amount] 如果仍为极大值,则无法组成,返回 -1;否则返回 dp[amount] 表示最少需要的硬币数
    • PS:由于 amount 最多由 amount 个硬币组成,因此初始化极大值只要大于 amount 就可以
  • 代码
    /*** 动态规划之完全背包:* 定义一维数组 dp,其中 dp[i] 表示组成总金额 i 所需的最少硬币数* 初始化 dp 数组,dp[0] 为 0,表示组成金额 0 需要 0 个硬币,dp[1...amount] 初始化为极大值,表示当前无法组成该总金额* 遍历硬币数组 coins,对于每种面额的硬币,遍历总金额范围内可以添加该硬币的金额下标。即 dp[j] 不为极大值,说明可以组成 j + coins[i] 金额,此时转移方程为:dp[j + coins[i]] = Math.min(dp[j + coins[i]], dp[j] + 1)* 遍历结束后,dp[amount] 如果仍为极大值,则无法组成,返回 -1;否则返回 dp[amount] 表示最少需要的硬币数* PS:由于 amount 最多由 amount 个硬币组成,因此初始化极大值只要大于 amount 就可以*/private static int solution(int[] coins, int amount) {// 判空if (amount == 0) {return 0;}if (coins == null || coins.length <= 0) {return -1;}// 定义且初始化 dp 数组int[] dp = new int[amount + 1];Arrays.fill(dp, 1, dp.length, Integer.MAX_VALUE);// 循环添加每一种硬币int coinsLen = coins.length;int dpLen = dp.length;for (int i = 0; i < coinsLen; i++) {for (int j = 0; j < dpLen - coins[i]; j++) {if (dp[j] < Integer.MAX_VALUE) {dp[j + coins[i]] = Math.min(dp[j + coins[i]], dp[j] + 1);}}}return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
http://www.lryc.cn/news/66929.html

相关文章:

  • 怎么恢复回收站?分享4个宝藏方法!
  • 大模型混战,最先实现“智慧涌现”的会是谁?
  • Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)
  • 快速理解基本的cookie、session 和 redis
  • STANet代码复现出现的问题
  • Java 中String对象详解
  • k8s nfs运行问题、etcd问题、calico网络问题
  • Qt--QString字符串类、QTimer定时器类
  • 2023.5.13>>Eclipse+exe4j打包Java项目及获取exe所在文件的路径
  • Centos系统的使用基本教程
  • IDEA生成ER图、UML类图、时序图、流程图等的插件推荐或独立工具推荐
  • Python心经(3)
  • 单工,半双工,全双工通讯
  • 【2023-05-09】 设计模式(单例,工厂)
  • 批量任务导致页面卡死解决方案
  • 避免“文献综抄”,5种写作结构助你完成文献综述→
  • Java异常和反射
  • Accesss数据库的那点事
  • 网络基础学习:osi网络七层模型
  • EndNote X9 引用参考 单击文献编号,不能跳转到文尾文献列表处,咋解决?文献编号 不能跳转 ,怎么办?
  • 用免费蜜罐工具配置Modbus工控蜜罐
  • DataGridXL中快速搜索单元格和底部全屏模式区域隐藏
  • DotNet几种微服务框架,你用过吗?
  • Nature | 生成式人工智能如何构建更好的抗体
  • 【hive】基于Qt5和libuv udp 的lan chat
  • Java版本工程项目管理系统源码,助力工程企业实现数字化管理
  • 什么是零拷贝?
  • 计算机专业含金量高的证书
  • 原装二手Keithley 2401低压源表 吉时利2401数字源表
  • gradle-8.1.1-all 快速下载百度网盘下载