322. 零钱兑换(动态规划)

【hot100-动态规划-322.零钱兑换】 力扣第322题“零钱兑换”要求计算凑成给定总金额所需的最少硬币数。使用动态规划方法,定义 dp[i] 为凑成金额 i 所需的最少硬币数。通过遍历所有硬币面额,更新 dp[i] 的值,状态转移方程为 dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1)。最终,若 dp[amount] 不为 Infinity,返回其值,否则返回 -1。时间复杂度为 $O(amount \times n)$,空间复杂度为 $O(amount)$。示例调用展示了代码的正确性。 阅读详情
/**
 * 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);
	}
}

面积二次矩second moment of area 极惯性矩polar moment of area 转动惯量moment of inertia面积一次矩first moment of area 看论文记录一下力学的名词专业术语,后面可以查看。 阅读详情

相关推荐

从S参数到SPICE模型:Cadence Sigrity Boardband SPICE完整使用指南

本文详细介绍了Cadence Sigrity Boardband SPICE工具的核心价值与完整使用流程。该工具通过矢量拟合算法,将复杂的多端口S参数文件转化为无源、紧凑且高精度的SPICE等效电路模型,从而极大提升时域仿真效率。指南涵盖了从数据导入、关键参数配置、模型精度验证到集成应用于PowerSI等系统级仿真的全步骤,是信号与电源完整性分析的必备利器。

defi6farmer的博客 434

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])

呵呵哒!的博客 682

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

【LeetCode】动态规划—322. 零钱兑换(附完整Python/C++代码)

零钱兑换 是一个经典的 动态规划 问题。给定一个整数数组 coins,其中每个元素代表不同面额的硬币,再给定一个整数 amount,表示需要凑成的总金额,要求计算出用这些硬币凑成该金额的最少硬币数量。如果凑不出该金额,则返回 -1。

Albert_Lsk的博客 1988

从DWS到设备树:MTK平台LK阶段GPIO初始化的隐秘路径与调试实战

本文深入探讨了MTK平台LK阶段GPIO初始化的完整流程,揭示了从DWS配置到设备树生成的隐秘转换路径。通过分析MT6768等平台的启动框架,提供了针对preloader到LK阶段GPIO初始化异常的实战调试方法与最佳实践,帮助开发者有效解决硬件与软件配置不匹配的常见问题。

h9j8k7l6m5n的博客 1003

【乐企-工具篇】生成发票左上角二维码

【代码】【乐企-业务篇】生成发票左上角二维码。

九七的博客 708

零钱兑换(Coins Change) -动态规划C语言实现

零钱兑换 动态规划 C语言

Jasonchen1224的博客 3736

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 声明了一个别名。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1661

深入浅出算法题-零钱兑换的动态规划问题

点击上方“摸鱼吧算法工程师”卡片,关注星标获取有趣、好玩的前沿干货!一、 零钱兑换:硬币的最少个数给一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的最少硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。可认为每种硬币的数量是无限的。解题关键点经典的动态规划问题。设置一个数组dp,其中每个元...

idol24的博客 1965

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

m0_37957160的博客 1044

python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为

本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。

斌擎科技 2768

LeetCode:322. 零钱兑换——动态规划从案例入门

LeetCode:322. 零钱兑换——动态规划从案例入门 🍎道阻且长,行则将至。🍓!!!

Super algorithm 的博客,技术爱好者。 2278

YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择

绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。

FJN110的博客 816

[动态规划]Leetcode322.零钱兑换(python)

[动态规划]Leetcode322.零钱兑换 如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。 题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例1 输入:coins = [1, 2, 5], amount = 11

阿旭的博客 1313

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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])比较的过程中被初始值覆盖。

2303_80070412的博客 1107

廖雪峰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) 的答案。(即未被更新过),说明无法凑出目标金额,返回。:将问题分解为子问题(凑出更小的金额)。你可以认为每种硬币的数量是无限的。,即最少需要的硬币数。

2301_81193552的博客 1210

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

leetCode322. 零钱兑换-动态规划

动态规划(Dynamic Programming) 1.动态规划题目特点 计数: 有多少种方法走到右下角 有多少种方法选出k个数使得和是Sum 求最大最小值 从左上角到右下角路径的最大数字和 最长上升子序列的长度 求存在性 取石子游戏,先手是否必胜 能不能选出k个数字使得和是sum 2.例题 1.leetcode-322. 零钱兑换 求最大最小值 给定不同面额的硬币 co...

风物长宜放眼量 307

【leetcode】322 零钱兑换(动态规划)

题目链接:https://leetcode-cn.com/problems/coin-change/ 题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5...

zjwreal 966

动态规划——零钱兑换(Leetcode 322)

背包问题是动态规划非常重要的一类问题,它有很多变种

青春无问西东 岁月自成芳华 1145

LeetCode 322:零钱兑换(动态规划)

LeetCode 322:零钱兑换(动态规划) 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amou...

bitdai2018 222

Leetcode 322. 零钱兑换 动态规划

Leetcode 322. 零钱兑换

想买很多漂亮衣服但是买不起的博客 395

LeeCode 322-零钱兑换(经典 动态规划)

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

weixin_42445439的博客 1017

【动态规划】 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

Code_Yilia的博客 351

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: 输入..

zjsru_Beginner的博客 755

LeetCode 322. 零钱兑换(Java 动态规划)

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说...

Mr.hu 3514

LeetCode 322. 零钱兑换:动态规划入门实战

本文详细解析了LeetCode 322零钱兑换问题,这是一个经典的动态规划入门题。文章从题目解读开始,分析了问题核心与关键条件,解释了为何使用动态规划而非暴力枚举。重点讲解了动态规划数组的设计与初始化、状态转移方程的推导过程,并逐行拆解了完整代码。通过测试用例验证了代码的正确性,指出了常见坑点和注意事项,最后总结了动态规划的通用解题步骤。全文以清晰的逻辑和详细的分析,帮助读者掌握动态规划的核心思想与解题技巧。

2401_86788218的博客 573
上一篇: 530. 二叉搜索树的最小绝对差
下一篇: 62. 不同路径(动态规划)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值