当前位置:网站首页>Snap: 322. Change of Change
Snap: 322. Change of Change
2022-08-10 00:32:00 【empty__barrel】
力扣:322. 零钱兑换
题目:
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额.
计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组合能组成总金额,返回 -1 .
你可以认为每种硬币的数量是无限的.
dp【j】的含义:
dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
递推公式:
dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
初始化:
dp【0】为0的原因:amount是可以等于0的,At the same time, it is logically obviousdp【0】 = 0
因为dp[j]Choose the smaller of the two = min(dp[j], dp[j-coins[i]]+1);所以下标非0的元素都是应该是最大值.
遍历顺序:
This question is completely backpack type,So from childhood to adulthood 遍历,At the same time, the minimum number of coins required is not involved in the sequence,所以本题的两个forNesting of loops is not required,谁先谁后都行.
The reason for setting the judgment condition before the recursive function:
因为dp[j] = min(dp[j], dp[j-coins[i]]+1);If this operationdp[j - coins[i]] == INT_MAX那么dp[j-coins[i]]+1就越界了,So we need to set a judgment condition.
代码:
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int>dp(amount+1,INT_MAX);
dp[0] = 0;
for(int i = 0; i < coins.size(); ++i){
for(int j = coins[i]; j <= amount; ++j){
if (dp[j - coins[i]] != INT_MAX) dp[j] = min(dp[j], dp[j-coins[i]]+1);
}
}
if(dp[amount] == INT_MAX) return -1;
return dp[amount];
}
};
边栏推荐
猜你喜欢
随机推荐
tiup cluster upgrade
上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链
力扣:322. 零钱兑换
How to insist to use procedural system?
70. 爬楼梯进阶版
Leetcode 530. 二叉搜索树的最小绝对差
mysql中的key是怎么用的,或者这个值有什么意义,如下图?
(转)FreeType字体位图属性
YGG 经理人杯总决赛已圆满结束,来看看这份文字版总结!
制定量化交易策略的基本步骤有哪些?
Leetcode 98. 验证二叉搜索树
HUAWEI CLOUD escorts the whole process of "Wandering Ark" for the first time, creating a popular brand
tiup cluster scale-out
String类常用方法
对象深复制,面试题
SRv6性能测量
深圳堡垒机厂家有哪些?重点推荐哪家?
力扣:377. 组合总和 Ⅳ
Sun Zhengyi lost 150 billion: it was expensive at the beginning
请讲一讲JS中的 for...in 与 for...of (上)









