zoukankan      html  css  js  c++  java
  • 刷题-力扣-518. 零钱兑换 II

    518. 零钱兑换 II

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/coin-change-2/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

    示例 1:

    输入: amount = 5, coins = [1, 2, 5]
    输出: 4
    解释: 有四种方式可以凑成总金额:
    5=5
    5=2+2+1
    5=2+1+1+1
    5=1+1+1+1+1
    

    示例 2:

    输入: amount = 3, coins = [2]
    输出: 0
    解释: 只用面额2的硬币不能凑成总金额3。
    

    示例 3:

    输入: amount = 10, coins = [10] 
    输出: 1
    

    注意:
    你可以假设:

    • 0 <= amount (总金额) <= 5000
    • 1 <= coin (硬币面额) <= 5000
    • 硬币种类不超过 500 种
    • 结果符合 32 位符号整数

    题目分析

    1. 根据题目描述计算总价值等于amount的硬币组合数
    2. dp[i]表示金额等于i的硬币组合数
    3. 若存在硬币金额为coin,有i>coin。如存在一种硬币组合等于i-coin,则在dp[i-coin]上加上一种硬币coin就可得到金额等于i的硬币组合

    代码

    class Solution {
    public:
        int change(int amount, vector<int>& coins) {
            sort(coins.begin(), coins.end(), compare);
            vector<int> dp(amount + 1, 0);
            dp[0] = 1;
            for (auto coin : coins) {
                for (int i = coin; i <= amount; ++i) {
                    dp[i] += dp[i - coin];
                }
            }
            return dp[amount];
        }
    
    private:
        static bool compare(int a, int b) {
            return a < b;
        }
    };
    
  • 相关阅读:
    微信报警提示
    使用pygal图表显示网站API接口数据
    读写文本文件,乱码解决方案
    MD5加密
    将DataTable导入到SQL数据库表中
    NPOI组件操作Excel导入、导出
    二叉树由先序和中序建树
    用两个栈模拟队列
    math type白嫖教程
    IDEA常用快捷键
  • 原文地址:https://www.cnblogs.com/HanYG/p/14870745.html
Copyright © 2011-2022 走看看