题目描述
给你一个整数数组 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
分析
硬币不是排序好的,所以要先处理下数组。然后 amount=0,直接输出 0. 所以将 dp[0]写进 0 即可然后从小到大,找出每个金额 i 的最优解,最后就找到 amount 的最优解了。
重点理解
dp 动态规划的思想。要一步步的从小问题开始,例如本题,就是从金额 1 开始寻找最优解,直到找到 amount 的最优解
代码
1 | class Solution { |