LeetCodeHot100-322-零钱兑换
题目
给你一个整数数组 coins
,表示不同面额的硬币;以及一个整数 amount
,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1
。
你可以认为每种硬币的数量是无限的。
示例 1:
1 | 输入:coins = [1, 2, 5], amount = 11 |
示例 2:
1 | 输入:coins = [2], amount = 3 |
示例 3:
1 | 输入:coins = [1], amount = 0 |
提示:
1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104
题解
同样的 DP 题,硬币的数量不用考虑,只需要考虑怎么选硬币就好了:
1)如果硬币的下标小于 0 了,如果此时 remaining 为 0,说明凑到了;否则凑不到;
2)如果剩余的钱数少于当前币值,就换一个小的硬币继续尝试;
2)不然就有两张情况可以选择:继续当前硬币或者换一个小的币值,这里的判断用硬币的个数去判断即可。
Python
1 | class Solution: |
运行结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!