/**
* 322. 零钱兑换
* @author wsq
* @date 2020/10/13
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
你可以认为每种硬币的数量是无限的。
示例 1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例 2:
输入:coins = [2], amount = 3
输出:-1
链接:https://leetcode-cn.com/problems/coin-change
*/
package com.wsq.dp;
public class CoinChange {
/**
* 动态规划
* 1.确定最后一步(金额amount兑换硬币的最少个数)
* 2.子问题:到达金额amount有几种情况,(比如:从金币额度2、5等到达amount)
* 3.定义转移方程, 比如f[i] = Math.min(f[i - 2], f[i - 5]) + 1
* 4.初始值以及边界情况
* 5.计算状态矩阵的顺序
* @param coins
* @param amount
* @return
*/
public int coinChange(int[] coins, int amount) {
// 开数组,明确有多少中情况需要存储
int[] dp = new int[amount + 1];
// 获取硬币的种类数
int n = coins.length;
// 初始条件 金额为0时 兑换的硬币数为0
dp[0] = 0;
// 从小到大求出每一个状态的值
for(int i = 1; i < amount + 1; i++){
// 由于是要求最小的 硬币兑换数, 因此在未求出之前, 每一个状态值都初始化为Integer.MAX_VALUE
dp[i] = Integer.MAX_VALUE;
for(int j = 0; j < n; j++){
// 考虑dp[i - coins[j]] != Integer.MAX_VALUE是因为可能存在部分金额无法兑换成功
if(i >= coins[j] && dp[i - coins[j]] != Integer.MAX_VALUE){
dp[i] = Math.min(1 + dp[i - coins[j]], dp[i]);
}
}
}
if(dp[amount] == Integer.MAX_VALUE){
dp[amount] = -1;
}
return dp[amount];
}
public static void main(String[] args) {
int[] coins = {1, 2, 5};
int amount = 10;
CoinChange cc = new CoinChange();
int ans = cc.coinChange(coins, amount);
System.out.println(ans);
}
}
相关推荐
从S参数到SPICE模型:Cadence Sigrity Boardband SPICE完整使用指南
本文详细介绍了Cadence Sigrity Boardband SPICE工具的核心价值与完整使用流程。该工具通过矢量拟合算法,将复杂的多端口S参数文件转化为无源、紧凑且高精度的SPICE等效电路模型,从而极大提升时域仿真效率。指南涵盖了从数据导入、关键参数配置、模型精度验证到集成应用于PowerSI等系统级仿真的全步骤,是信号与电源完整性分析的必备利器。
LeetCode 322.零钱兑换 完全背包 + 动态规划
由于 min(dp[j-coins[i]] + 1,dp[j])比较的过程中,若我们设置的初始值较小,可能会被初始值覆盖,所以dp[j]必须初始化为一个最大的数。递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);本题中所求为钱币的最小个数,与顺序无关。所以可以方式一或者方式二都可以!那么dp[j] 要取所有 dp[j - coins[i]] + 1中最小的。dp[j]:凑足总额为j所需钱币的最少个数为dp[j]dp[j] (考虑coins[i])
手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)
本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。
【LeetCode】动态规划—322. 零钱兑换(附完整Python/C++代码)
零钱兑换 是一个经典的 动态规划 问题。给定一个整数数组 coins,其中每个元素代表不同面额的硬币,再给定一个整数 amount,表示需要凑成的总金额,要求计算出用这些硬币凑成该金额的最少硬币数量。如果凑不出该金额,则返回 -1。
从DWS到设备树:MTK平台LK阶段GPIO初始化的隐秘路径与调试实战
本文深入探讨了MTK平台LK阶段GPIO初始化的完整流程,揭示了从DWS配置到设备树生成的隐秘转换路径。通过分析MT6768等平台的启动框架,提供了针对preloader到LK阶段GPIO初始化异常的实战调试方法与最佳实践,帮助开发者有效解决硬件与软件配置不匹配的常见问题。
【乐企-工具篇】生成发票左上角二维码
【代码】【乐企-业务篇】生成发票左上角二维码。
零钱兑换(Coins Change) -动态规划C语言实现
零钱兑换 动态规划 C语言
29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解
我们先看下效果,在 MPC_EXT 类的 DEFINE 方法里编写 ABAP 代码之后,用 Postman 使用 url 访问 OData metadata,在返回的数据里,能看到我们用 ABAP 代码添加的自定义注解。你好,请问可以不可以在odata里面通过什么设置,从而自动给metadata.xml中加上注解,实现value help的功能,还是说每次需要在metadata.xml中修改?的词汇引用,然后为命名空间 com.sap.vocabularies.UI.v1 声明了一个别名。
深入浅出算法题-零钱兑换的动态规划问题
点击上方“摸鱼吧算法工程师”卡片,关注星标获取有趣、好玩的前沿干货!一、 零钱兑换:硬币的最少个数给一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的最少硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。可认为每种硬币的数量是无限的。解题关键点经典的动态规划问题。设置一个数组dp,其中每个元...
halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建
halcon实现瓶盖检测与定位代码: dev_close_window() dev_open_window(0, 0, 1024, 1024, 'black', WindowHandle) list_image_files('C:/Users/TIMI/Desktop/picture/circle', 'default', [], ImageFiles) for J := 1 to 4 by 1 *read image read_image(halconImage, ImageFil
python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为
本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。
LeetCode:322. 零钱兑换——动态规划从案例入门
LeetCode:322. 零钱兑换——动态规划从案例入门 🍎道阻且长,行则将至。🍓!!!
YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择
绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。
[动态规划]Leetcode322.零钱兑换(python)
[动态规划]Leetcode322.零钱兑换 如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。 题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例1 输入:coins = [1, 2, 5], amount = 11
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
动态规划LeetCode-322.零钱兑换
如果dp[2]还是INT_MAX的话,说明用这个硬币的话,无法得到金额2,那么这时候即使加上一个3元的硬币,也无法得到5元,所以这个时候就不能更新dp[5],因为原来的dp[5]可能已经被其他硬币组合更新过,或者还没有被更新过,但此时这个路径是无效的。当j=2时,dp[2 -2]=dp[0]=0,所以dp[2]=0+1=1。然后其他下标值,考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
动态规划解leetcode.322零钱兑换问题
其中 cj 代表的是第 j 枚硬币的面值。如手中有面值为1、2、5的硬币,需要七元,可以在F(7-5)=F(2)种可能的基础上增加一枚5元硬币(注:F(2)指需要2元时不同的硬币组合数量),因为新加入一枚硬币,所以F(2)+1;定义 F(i) 为组成金额 i 所需最少的硬币数量,假设在计算 F(i) 之前,我们已经计算出 F(0)−F(i−1) 的答案。(即未被更新过),说明无法凑出目标金额,返回。:将问题分解为子问题(凑出更小的金额)。你可以认为每种硬币的数量是无限的。,即最少需要的硬币数。
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
leetCode322. 零钱兑换-动态规划
动态规划(Dynamic Programming) 1.动态规划题目特点 计数: 有多少种方法走到右下角 有多少种方法选出k个数使得和是Sum 求最大最小值 从左上角到右下角路径的最大数字和 最长上升子序列的长度 求存在性 取石子游戏,先手是否必胜 能不能选出k个数字使得和是sum 2.例题 1.leetcode-322. 零钱兑换 求最大最小值 给定不同面额的硬币 co...
【leetcode】322 零钱兑换(动态规划)
题目链接:https://leetcode-cn.com/problems/coin-change/ 题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5...
动态规划——零钱兑换(Leetcode 322)
背包问题是动态规划非常重要的一类问题,它有很多变种
LeetCode 322:零钱兑换(动态规划)
LeetCode 322:零钱兑换(动态规划) 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amou...
Leetcode 322. 零钱兑换 动态规划
Leetcode 322. 零钱兑换
LeeCode 322-零钱兑换(经典 动态规划)
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
【动态规划】 LeetCode #322 零钱兑换
题目链接: LeetCode #322 零钱兑换 题目描述: 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明: 你可以认为每种硬币的数量是无限的。 通过次数82
LeetCode 322.零钱兑换 (动态规划)
题目传送门:322.零钱兑换 题目详情: 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。 你可以认为每种硬币的数量是无限的。 示例1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = 5 + 5 + 1示例 2: 输入:coins = [2], amount = 3 输出:-1示例 3: 输入..
LeetCode 322. 零钱兑换(Java 动态规划)
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说...
LeetCode 322. 零钱兑换:动态规划入门实战
本文详细解析了LeetCode 322零钱兑换问题,这是一个经典的动态规划入门题。文章从题目解读开始,分析了问题核心与关键条件,解释了为何使用动态规划而非暴力枚举。重点讲解了动态规划数组的设计与初始化、状态转移方程的推导过程,并逐行拆解了完整代码。通过测试用例验证了代码的正确性,指出了常见坑点和注意事项,最后总结了动态规划的通用解题步骤。全文以清晰的逻辑和详细的分析,帮助读者掌握动态规划的核心思想与解题技巧。
434



被折叠的 条评论
为什么被折叠?



