做国内网站花费,门户网站建设自查报告,网页模版设计,是网站推广的案例给你一个整数数组 coins #xff0c;表示不同面额的硬币#xff1b;以及一个整数 amount #xff0c;表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额#xff0c;返回 -1 。
你可以认为每种硬币的数量是无限的。 示…给你一个整数数组 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提示
1 coins.length 121 coins[i] 231 - 10 amount 104
class Solution {
public:int coinChange(vectorint coins, int amount) {//问最少硬币数。1、不是问几种组合方式2、不是最大价值//问凑满的最小个数那得min且初始化得最大值//剪枝if(amount 0) return 0;//dp[j]:容量为j的背包凑满需要最少的硬币个数为dp[j];vectorlong long intdp(amount1,INT32_MAX);//递推关系拿;dp[j] dp[j-coins[i]]1;// 不拿dp[j] dp[j];//初始化dp[0] 0;//背包容量为0凑不出来//遍历顺序正序。求得是个数跟组合排列无关for(int i 0;i coins.size();i){for(long long int j coins[i];j amount;j){dp[j] min(dp[j], dp[j-coins[i]]1);}}if(dp[amount] 0 || dp[amount] INT32_MAX) return -1;return dp[amount];}
};