描述
给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1
样例
1
输入:
[1, 2, 5]
11
输出: 3
解释: 11 = 5 + 5 + 1
2
[2]
3
输出: -1
注意
你可以假设每种硬币均有无数个
思路
使用动态规划的思路:
1.dp[j]表示总金额为j的情况下最少需要多少个硬币。
2.循环每个硬币的面额,如果coins[i] <= j,那么dp[j] = min(dp[j], 1+dp[j-coins[i]])
3.初始状态下dp[j] = INT_MAX-100,这个是因为如果设置为INT_MAX,会出现溢出的情况,dp[j]有可能为负数,
dp[0]=0,为了防止出现j==coins[i]的情况
代码
1 | class Solution { |
-------------end of file
thanks for reading-------------