首页 > 其他分享 >518. 零钱兑换 II(中)

518. 零钱兑换 II(中)

时间:2024-01-17 20:55:07浏览次数:28  
标签:零钱 int res coins List II 518 amount track

目录

题目

  • 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。
    请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。
    假设每一种面额的硬币有无限个。
    题目数据保证结果符合 32 位带符号整数。

示例 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

法一、回溯

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        def backtrack(coins: List[int],amount: int, track: List[int], res: List[List[int]]):
            #如果减剩的最后结果为0,则将路径加入结果集
            if amount==0:
                res.append(track[:])
                return 
            if amount < 0:
                return
            for i in range(len(coins)):
                track.append(coins[i])#做选择
                backtrack(coins[i:], amount - coins[i],track,res)#递归调用,更新目标值为减去当前候选数后的值,并传递更新后的路径和结果集
                #[i:]避免了重复的组合结果
                track.pop()#撤销选择

        res=[]#结果列表
        track=[]#选择列表
        backtrack(coins,amount,track,res)
        return len(res)
  • 超时

法二、动态规划

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp = [0] * (amount + 1)  # 动态规划数组:用于保存凑出每个金额所需的组合数量。
        dp[0] = 1  # base case 表示暂时还没有找到任何组合方式

        for coin in coins:#遍历硬币列表
            for i in range(coin, amount + 1):#对于每个硬币面额 coin,从 coin 开始到目标金额 amount,依次累加动态规划数组中对应位置的值。这样,每个位置 i 的值表示凑出金额 i 的组合数量。
                dp[i] += dp[i - coin]

        return dp[amount]

标签:零钱,int,res,coins,List,II,518,amount,track
From: https://www.cnblogs.com/lushuang55/p/17971152

相关文章

  • 322. 零钱兑换(中)
    目录题目法一、动态规划法二、带备忘录的动态规划法三、dp数组的迭代解法题目给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种......
  • Tr0II
    扫描IP,查找服务有802122端口开放,网站进去看下drib扫描,没有作用上面FTP可以匿名登录,账号是Anonymous(匿名的意思)密码直接enter确定ls有流量分析文件getlol.pcap下载下来打开,加规则,查看tcp流量进入此后缀,点击文件拉到kalifileroflmaostrings(识别动态......
  • stm32硬件实现IIC
    #include"Driver_IIC.h"#include"Delay.h"/***IIC默认地工作于从模式。*生成起始条件后自动地从从模式切换到主模式,*当仲裁丢失或产生停止信号时,从主模式切换到从模式。***从模式用于接收数据;主模式用于发送数据。*//***初始化*/voidDriver_II......
  • uniGUI学习之UniImage1三种导入图片方式
    uniGUI学习之UniImage1三种导入图片方式参考自带DEMO,C:\ProgramFiles(x86)\FMSoft\Framework\uniGUI\Demos\Desktop\UniImage1]  FromPicture,直接加载到Picture属性 2]从磁盘文件中加载UniImage3.Picture.LoadFromFile('0.jpg');0.jpg和应用程序.exe位置要在一......
  • iis 软件启动后,状态栏有图标,但是窗口没法显示在桌面
    找到IIS管理器启动程序的所在位置并在cmd命令行中调用inetmgr.exe/reset进行重启先查看IIS管理器属性,找到其位置 管理员模式打开cmd命令行,并切换到上面的文件夹下运行Inetmgr.exe/reset 运行完成后可以重新看到IIS窗口原因:由于某种原因,之前该窗口的位置被改动过,显......
  • LY1087 [ 20230217 CQYC模拟赛VIII T2 ] 记忆
    我们来看这样一道题:请你维护一个序列\(a\)。1k将所有\(a_i\)变成\(|a_i-k|\)。2lr求\(\sum_{i=l}^{r}a_i\)。\(n,q\le10^5\)。首先我们不难写出一个\(naive\)的代码。#include<iostream>#include<algorithm>#include<cstdio>#include<arra......
  • 吴师兄学算法day07 双指针 680. 验证回文串 II
    题目:680. 验证回文串II易错点:s[1:3]是左闭右开我的第一次代码:classSolution(object):defvalidPalindrome(self,s):""":types:str:rtype:bool"""isPalindrome=lambdax:x==x[::-1]l......
  • IIC:DDM_SFP光模块参数读取
    光模块数字诊断监控数据读取逻辑报告I2C从设备地址0xA2访问的256字节的数据包括一些常量,也包含一些只读的变量,甚至还有一些可写的变量。数字诊断内存映射专用数据字段描述如下: 图1期间地址分布说明 图2检测信号地址 Finisar公司的DDM数据位于器件地址A2H,具体信号数据......
  • 吴师兄学算法day07 167. 两数之和 II - 输入有序数组
    题目:167. 两数之和II-输入有序数组易错点:下标为1开始我的代码:classSolution:deftwoSum(self,numbers:List[int],target:int)->List[int]:right=len(numbers)-1left=0whileleft<right:ans=numbers[left]......
  • IIS实现负载均衡,通过ARR和URL重写
    目录一、实现整体方式介绍 二、配置负载均衡服务 三、把请求转发到负载均衡器 回到顶部一、实现整体方式介绍项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访......