当前位置: 首页 > news >正文

​LeetCode解法汇总518. 零钱兑换 II

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)


描述:

给你一个整数数组 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

提示:

  • 1 <= coins.length <= 300
  • 1 <= coins[i] <= 5000
  • coins 中的所有值 互不相同
  • 0 <= amount <= 5000

解题思路:

使用动态规划,amoutDp[i]代表到总额为i时所有的组合可能。

正常来说,我们会先求1,在求2,3。但是这样会有一个问题,以amout=5,coins=[1,2,5]为例。当i=3时,3=1+2和3=2+1,这两个很明显重复了,导致重复计算。

所以,我们需要换一种思路,首先求仅使用1求[1,5]范围内每个位置有多少种可能,然后使用1,2求[2,5]范围内每个位置有多少种可能,最后使用[1,2,5]求[5,5]范围内有多少种可能。这样就确定了顺序,确保不会存在先选后选的问题。

代码:

class Solution518
{
public:int change(int amount, vector<int> &coins){vector<int> amountDp(amount + 1, 0);amountDp[0] = 1;for (int coin : coins){for (int i = coin; i <= amount; i++){amountDp[i] += amountDp[i - coin];}cout << amountDp.size() << endl;}return amountDp[amount];}
};

相关文章:

  • MySQL内置函数
  • 解決flask-restful提示Did not attempt to load JSON data 问题
  • Python 文件操作-1
  • hdlbits系列verilog解答(Mux256to1)-63
  • PCL拟合并绘制平面(二)
  • 电阻的妙用:限流、分压、滤波,助力电路设计!
  • JavaScript Uncaught ReferenceError: WScript is not defined
  • JavaScript基础练习题之求斐波那契数列第N项的值
  • 【tips】Git使用指南
  • 【Java程序设计】【C00383】基于(JavaWeb)Springboot的水产养殖系统(有论文)
  • web渗透测试漏洞流程:红队目标信息收集之批量信息收集
  • 计算机网络——数据链路层(数据链路层功能概述)
  • 【智能算法】飞蛾扑火算法(MFO)原理及实现
  • React系列之React版本时间线和主要更新
  • GIS与Python机器学习:开创地质灾害风险评价新纪元
  • .pyc 想到的一些问题
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【391天】每日项目总结系列128(2018.03.03)
  • Create React App 使用
  • ES6 ...操作符
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode29.两数相除 JavaScript
  • Nodejs和JavaWeb协助开发
  • SwizzleMethod 黑魔法
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • ubuntu 下nginx安装 并支持https协议
  • 从tcpdump抓包看TCP/IP协议
  • 读懂package.json -- 依赖管理
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于Java中分层中遇到的一些问题
  • 马上搞懂 GeoJSON
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端临床手札——文件上传
  • 使用parted解决大于2T的磁盘分区
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 用jquery写贪吃蛇
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 进程与线程(三)——进程/线程间通信
  • #DBA杂记1
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (算法)Travel Information Center
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)u-boot-nand.bin的下载
  • (一)认识微服务
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)平衡树
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net8 Blazor 尝鲜