zoukankan      html  css  js  c++  java
  • Leetcode322. Coin Change零钱兑换

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

    示例 1:

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

    示例 2:

    输入: coins = [2], amount = 3 输出: -1

    说明:

    你可以认为每种硬币的数量是无限的。

    动态规划

    class Solution {
    public:
        int coinChange(vector<int>& coins, int amount) 
        {
            int len = coins.size();
            if(len == 0)
                return -1;
            //如果不减1,下面的res[i - coins[j]] + 1可能会溢出
            vector<int> res(amount + 1, INT_MAX - 1);
            res[0] = 0;
            for(int i = 1; i <= amount; i++)
            {
                for(int j = 0; j < len; j++)
                {
                    if(i - coins[j] >= 0)
                    {
                        res[i] = min(res[i], res[i - coins[j]] + 1);
                    }
                }
            }
            return res[amount] == INT_MAX - 1?  -1 : res[amount];
        }
    };
  • 相关阅读:
    csp-s模拟110
    csp-s模拟109
    留念
    csp-s 2019 游记
    HEOI2020
    CSP-S2019记
    堆积的$TIPS$
    低错复习
    倍增并查集
    4.26
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433806.html
Copyright © 2011-2022 走看看