当前位置:网站首页>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];
}
};
边栏推荐
猜你喜欢
随机推荐
力扣:279.完全平方数
kubesphere
What is the stability of the quantitative trading interface system?
集合运算样例
Controller层代码这么写,简洁又优雅!
如何正则匹配乱码?
完全背包理论
Basic operations of xlrd and xlsxwriter
iNFTnews | 迪士尼如何布局Web3
tiup cluster upgrade
你的手机曾经被监控过吗?
制定量化交易策略的基本步骤有哪些?
安踏携手华为运动健康共同验证冠军跑鞋 创新引领中国体育
全面解析FPGA基础知识
(转)字符集编码标识符,数字表示字符编码
2022-08-09 mysql/stonedb-慢SQL-Q16分析
带着昇腾去旅行:一日看尽金陵城里的AI胜景
shell数组
金仓数据库 KingbaseGIS 使用手册(6.3. 几何对象创建函数)
Leetcode 98. 验证二叉搜索树