LeetCode-322. 零钱兑换

题目描述 零钱兑换

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

示例

输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1

解题思路

动态规划

  • DP定义:记dp[i]为凑成总金额i的最少硬币个数;
  • DP初始:dp[0] = 0,dp[1, 2,....., i] = i+1;
  • DP更新:dp[i] = min(dp[i], dp[i-coin]);

代码

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount+1, amount+1);
        dp[0] = 0;
        for(int i=1;i<=amount;i++){
            for(auto coin:coins){
                if(coin<=i){
                    dp[i] = min(dp[i], dp[i-coin] + 1);
                }
            }
        }
        return dp[amount]>amount ? -1: dp[amount];
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 思路:参考自《程序员代码面试指南》--左程云著 这是一道经典的动态规划方法,我们可以构造一个dp数组,...
    大数据Zone阅读 1,374评论 0 1
  • 322. 零钱兑换 Python3 实现 动态规划 GitHub链接:https://github.com/lic...
    leacoder阅读 339评论 0 2
  • 问题 给定不同面额的硬币(coins)和一个总金额(amount) 。写一个函数来计算可以凑成总金额所需的最少的硬...
    BeckJin阅读 6,224评论 0 2
  • LeetCode基础算法-动态规划 LeetCode 动态规划 动态规划的核心步骤: 查看大问题的最优解能否使用小...
    24K男阅读 1,650评论 0 3
  • 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。...
    scriptllh阅读 377评论 0 0