Leetcode322. 零钱兑换【动态规划】

左手的ㄟ右手 2022-09-08 11:49 283阅读 0赞

难度:中等
题目描述:

给你一个整数数组 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

示例 4:

输入:

coins = [1], amount = 1

输出:

1

示例 5:

输入:

coins = [1], amount = 2

输出:

2

提示:

1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104

  1. class Solution {
  2. public:
  3. int ans = 0;
  4. int coinChange(vector<int>& coins, int amount) {
  5. if(amount<1){
  6. return 0;
  7. }
  8. // 初始化相应金额的dp数组
  9. vector<int> dp(amount+1, amount+1);
  10. dp[0]=0;
  11. for(int j=1;j<amount+1;j++){
  12. for(int i=0;i<coins.size();i++){
  13. if(coins[i]<=j){
  14. dp[j]=min(dp[j-coins[i]]+1,dp[j]);
  15. }
  16. }
  17. }
  18. if(dp[amount]>amount){
  19. return -1;
  20. }else{
  21. return dp[amount];
  22. }
  23. }
  24. };

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode322 零钱兑换

    给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1

    相关 Leetcode 322. 零钱兑换

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

    相关 LeetCode-322. 零钱兑换

    [322. 零钱兑换][322.] 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币