LeetCode:322.零钱兑换

devtools/2025/2/2 13:05:44/

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:322.零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
示例 1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例 2:
输入:coins = [2], amount = 3
输出:-1
示例 3:
输入:coins = [1], amount = 0
输出:0

  • 本题求的是最少硬币数,既不是排列问题也不是组合问题,所以两个for循环的顺序都可以
  • dp[j]含义:装满容量为j的背包的最少硬币数
  • 注意非0下标的初始值需要为Integer.MAX_VALUE0下标的初始为0
  • 递推公式:dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1),即nums[i]装还是不装
  • 如果dp[j - coins[i]] == maxValue 则不符合,需要剔除,递推公式会溢出
java">	public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];int maxValue = Integer.MAX_VALUE;// 0下标需要初始话为0, 非0下标初始化为最大值,因为下面求的是 Math.minArrays.fill(dp, maxValue);dp[0] = 0;for (int i = 0; i < coins.length; i++) {for (int j = coins[i]; j <= amount; j++) {// 注意这个if,如果dp[j - coins[i]] == 最大值(那么再加1就会溢出!)// 即选择nums[i]也到不了amount,只有不是最大值时才考虑if (dp[j - coins[i]] != maxValue)dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}return dp[amount] == maxValue ? -1 : dp[amount];}

http://www.ppmy.cn/devtools/155443.html

相关文章

Java 9模块开发:Eclipse实战指南

在上一篇教程中&#xff0c;我们已经了解了Java 9模块的基础知识。今天&#xff0c;我们将深入探讨如何使用Eclipse IDE来开发和运行Java 9模块。Eclipse作为一款强大的开发工具&#xff0c;为Java开发提供了丰富的功能支持。不过需要注意的是&#xff0c;对于Eclipse 4.7&…

【机器学习】深入无监督学习分裂型层次聚类的原理、算法结构与数学基础全方位解读,深度揭示其如何在数据空间中构建层次化聚类结构

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: 机器学习专栏 目录 引言 分裂型层次聚类&#xff08;Divisive Hierarchical Clustering&#xff09; 1. 基本原理 2. 分裂型层次聚类的算法步骤 Step 1: 初始化 Step 2: 选择分裂的簇 Step 3: 执行分裂操作…

TCP UDP Service Model

主机A的TCP层可以通过发送FIN消息来关闭链接&#xff0c;主机B确认A不再有数据发送&#xff0c;并停止从A接收新数据。 B完成向A发送数据&#xff0c;并发送自己的FIN消息&#xff0c;告知A它们可以关闭链接。 主机A通过发送ACK作为回应&#xff0c;确认链接现已关闭。 &…

P1158

题意 就是给你机器的工作半径&#xff0c;每次工作要花钱&#xff0c;就是工作半径的平方&#xff0c;问你怎么花最少的钱&#xff0c;拦截所有导弹。 思路 每次通过我们的公式计算距离&#xff0c;存入并排序&#xff0c;最后即可得出答案。 代码 #include <bits/stdc…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

嵌入式经典面试题之操作系统(一)

文章目录 1 请你说说常用的Linux命令有哪些&#xff1f;2 在linux中如何创建一个新的目录&#xff1f;3 Linux中查看进程运行状态的指令、tar解压文件的参数。4 在linux中&#xff0c;文件权限如何修改&#xff1f;5 怎样以root权限运行某个程序&#xff1f;6 在linux里如何查看…

AI大模型开发原理篇-6:Seq2Seq编码器-解码器架构

基本概念 Seq2Seq架构的全名是“Sequence-to-Sequence”&#xff0c;简称S2S&#xff0c;意为将一个序列映射到另一个序列。q2Seq编码器-解码器架构&#xff0c;这也是Transformer的基础架构。Seq2Seq架构是一个用于处理输入序列和生成输出序列的神经网络模型&#xff0c;由一…

计算机组成原理——存储系统(一)

在人生的道路上&#xff0c;成功与失败交织成一幅丰富多彩的画卷。不论我们是面对胜利的喜悦&#xff0c;还是遭遇失败的痛苦&#xff0c;都不能放弃对梦想的追求。正是在这种追求中&#xff0c;我们不断地超越自我&#xff0c;不断地突破自己的极限。只有勇往直前&#xff0c;…