518. Coin Change 2

2023-12-21 15:48
文章标签 change 518 coin

本文主要是介绍518. Coin Change 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

518. 零钱兑换 II

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

 

    示例 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 位符号整数

    解法一:

    // 回溯。超时。
    class Solution {
    public:void change(int amount, const vector<int>& coins, int index, int& count) {// assert(amount >= 0);if (amount == 0) {++count;return;}if (index == coins.size()) return;int maxC = amount / coins[index];for (int i = 0; i <= maxC; ++i) {change(amount - i * coins[index], coins, index + 1, count);}}int change(int amount, vector<int>& coins) {int count = 0;change(amount, coins, 0, count);return count;}
    };

    解法二:

    class Solution {
    public:int change(int amount, vector<int>& coins) {vector<int> dp(amount + 1, 0);dp[0] = 1;for (int c : coins) {for (int i = c; i <= amount; ++i) {dp[i] += dp[i - c];}}return dp[amount];}
    };

    解法一:

    回溯查找所有情况。超时。

    解法二:

    假设目前已知n(n>0)个硬币,要兑换的钱数为amount = i时的总情况数为dp[i]。dp[0] = 0。

    此时如果再添一种面额为x的新硬币,它只可能会对原有dp数组中i>=x的元素产生影响。

    具体的影响是;dp[i] += dp[i - x],其中i>=x。

    这个就是它的递推关系式。从0个硬币开始,初始时dp[0]=0。依次添加硬币,对每次添加对dp[]产生的影响进行更新。直到最终添加完所有硬币。

    2020/07/04 11:55

    这篇关于518. Coin Change 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/520575

    相关文章

    fzu 2277 Change 线段树

    Problem 2277 Change Time Limit: 2000 mSec    Memory Limit : 262144 KB  Problem Description There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each node has a value ai.

    时间序列|change point detection

    change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

    代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

    52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

    代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

    完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt

    674 - Coin Change

    一道很水的DP,但我做的时候也很费劲,由于存在面值为1的时候,所以所有面额都至少有1种方法。 推导出状态方程就是 dp(V,step) += dp(V - i * coin[step],step - 1); 其中V为当前的面值,coin[step]为硬币的面额,递归边界,如果step == 0(也就是递归到硬币面额为1的时候,返回1); #include<cstdio>#include<

    Flink新增特性 | CDC(Change Data Capture) 原理和实践应用

    点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好玩! CDC简介 CDC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。

    518.零钱兑换2

    518.零钱兑换2 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例 1: 输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑

    Unity3D DOTS系列之Struct Change核心机制详解

    前言 在Unity3D的DOTS(Data-Oriented Technology Stack)体系中,Struct Change是一个核心的内存管理机制,它涉及对Entity和Component数据的重新排列和内存分配。DOTS通过ECS(Entity Component System)模型,将游戏中的对象(Entity)、属性(Component)和行为(System)分离,以数据驱动的方式

    How can I change from OpenAI to ChatOpenAI in langchain and Flask?

    题意:“在 LangChain 和 Flask 中,如何将 OpenAI 更改为 ChatOpenAI?” 问题背景: This is an implementation based on langchain and flask and refers to an implementation to be able to stream responses from the OpenAI

    elementUI——checkbox复选框监听不到change事件,通过watch监听来解决——基础积累

    今天在写后台管理系统的时候,遇到一个需求,就是要求监听复选框的change事件,场景就是:两个复选框互斥,且可以取消勾选。 就是这两个复选框可以同时都不勾选,如果勾选的话,另一个一定要取消勾选。 通过checkbox组件的change事件,是无法触发的。 可以通过watch来监听解决此问题。 比如上面的两个复选框值分别是:checked和cateChecked,可以通过监听每个值得变化