Leetcode面试经典150题-322.零钱兑换

devtools/2024/10/19 18:20:22/

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= coins.length <= 12
  • 1 <= coins[i] <= 231 - 1
  • 0 <= amount <= 104

这个题很容易就写成二维的动态规划了,使用一维动态规划需要理清思路,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {/**本题是零钱兑换系列问题,思路是动态规划,边解题边解释思路吧 */public int coinChange(int[] coins, int amount) {/**如果只有一种货币,能除尽就直接返回,除不尽返回-1 */if(coins.length == 1) {return amount % coins[0] == 0? amount / coins[0] : -1;}/**如果不止一个,使用动态规划进行解题,先定义动态规划数组dp, dp[i]的含义是i这个amount最少由多少个硬币凑成我们从小金额到大金额进行循环,比如我们的硬币分别是1,2,5,dp[1]=1 dp[2]=1 dp[3]=2dp[4]=Math.min(dp[4-1]+1, dp[4-2]+1)=2dp[5]=Math.min(dp[5-1]+1, dp[5-2]+1, dp[5-5]+1)括号里的三个分别表示凑够了4再加个1元,凑够了3再加一张2元,凑够了0再加一张5元...dp[11]= Math.min(dp[11-1]+1, dp[11-2]+1,dp[11-5]+1)*/int[] dp = new int[amount + 1];/**先都设置为最大值 */Arrays.fill(dp, Integer.MAX_VALUE);/**0这个金额0个硬币就能凑出来,所以dp[0]=0 */dp[0] = 0;/**给硬币数组排个序 */Arrays.sort(coins);/**从1到amount进行遍历 */for(int curAmount = 1; curAmount <= amount ; curAmount++) {for(int i = 0; i < coins.length; i++) {/**如果小于0了,我们dp数组就越界了,而且负数不可能由任何树组成就算它存在也应该是最大值 */if(curAmount - coins[i] < 0) {break;}dp[curAmount] = Math.min(dp[curAmount], dp[curAmount-coins[i]] == Integer.MAX_VALUE? Integer.MAX_VALUE : dp[curAmount-coins[i]] + 1);}}return dp[amount] == Integer.MAX_VALUE? -1 : dp[amount];}
}

时间复杂度肯定是最低了,表现一般般,凑活这看吧


http://www.ppmy.cn/devtools/117722.html

相关文章

io流(学习笔记02)采用递归方式寻找文件

方法递归&#xff08;为了遍历一个文件夹内的所有文件夹&#xff0c;包括子文件夹内部的文件...&#xff09; 递归是一种算法 形式上&#xff1a;方法调用自身的形式 递归的形式&#xff1a; 直接递归&#xff1a;方法自己调用自己。 间接递归&#xff1a;方法调用其他方法…

Pandas 总结试卷

Pandas 总结试卷 # 导入pandas库 import pandas as pd# 0. 创建一个空的DataFrame df pd.DataFrame() df# 创建一个包含学生姓名、年龄、成绩的DataFrame # 数据表为&#xff1a;姓名 年龄 成绩 张三 18 85 李四 19 90 王五 20 78 赵六 21 92 data {姓名: [张三, 李四, 王五…

Python办公自动化案例:将Excel数据批量保存到Word表格中

案例:将excel数据批量保存到Word表格中 要将Excel数据批量保存到Word表格中,可以使用Python的openpyxl库来读取Excel文件,以及python-docx库来创建和编辑Word文档。以下是一段示例代码,以及代码解释和一些注意事项。 准备好的Excel数据: 1.安装所需库 首先,确保你已经…

JAVA集成Jasypt进行加密、解密(SpringBoot)

JAVA (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程 在开发过程中&#xff0c;我们经常需要处理敏感数据&#xff0c;如数据库密码、API 密钥等。为了确保这些数据的安全性&#xff0c;我们可以使用加密技术来保护它们不被泄露。Jasypt&#xff08;Java Simplified Enc…

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 2、写一个脚本&#xff0c;包含以下内容&#xff1a; 1、写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 1、在家目录下创建目录文件&#xff0c;dir 2、dir下创建dir1和dir2 …

使用PyTorch检测和验证多GPU环境的Python脚本

使用PyTorch检测和验证多GPU环境的Python脚本 在深度学习和机器学习中&#xff0c;GPU的计算能力对模型训练和推理的速度有着极大的影响。随着多GPU系统的普及&#xff0c;如何确保多GPU能被正确识别并使用&#xff0c;是一个非常关键的问题。本文将为大家介绍一段简洁的Pytho…

c++9月26日

1.什么是虚函数,什么是纯虚函数 >虚函数:在父类的成员函数前加virtual关键字,在子类中重写该函数,这个函数就是虚函数 注意:如果子类没有对这个虚函数重写,在调用时会调用父类的函数实现 >纯虚函数:在父类成员函数前加virtual关键字(该函数不需要实现具体功能),在函数声明…

微信小程序拨打电话点取消报错“errMsg“:“makePhoneCall:fail cancel“

问题&#xff1a;微信小程序中拨打电话点取消&#xff0c;控制台报错"errMsg":"makePhoneCall:fail cancel" 解决方法&#xff1a;在后面加上catch就可以解决这个报错 wx.makePhoneCall({phoneNumber: 181********}).catch((e) > {console.log(e) //用…