给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
1 | 输入:coins = [1, 2, 5], amount = 11 |
思路:dp[amount],计算每个amount的关于提供硬币的所需硬币数量:针对提供的硬币数组,计算从0~amount的dp数组。存在这样的关系:
- 需要计算每一个金额最小的硬币数
- 遍历每一个硬币,如果可以大于要组成的amount,直接continue(无法通过这个硬币组成该金额)
- 小于amount,组成amount的硬币个数为:dp[amount - coinAmount] + 1(需要注意,如果dp[amount - coinAmount] 为-1,即无法组成该amount硬币组合,直接continue)
- 对于每种组合,求最小的进行赋值:dp[amount] = min(dp[amount - coinAmount] ) + 1
代码:
1 | class Solution { |