问题的链接:https://leetcode.com/problems/coin-change/
我的代码无法从LeetCode传递一些测试用例:
def coinChange(coins, amount):
"""
:type coins: List[int]
:type amount: int
:rtype: int
"""
coins.sort()
#init the dp list
dp = [0]+[float('inf')]*amount
for i in coins:
for j in range(i,amount+1):
dp[j] = min(dp[j],int(j/i)+dp[j%i])
if dp[-1]==float('inf'):
return -1
else:
return dp[-1]
#test cases1,the result should be 3
coins = [1, 2, 5]
amount = 11
print(coinChange(coins,amount))
#test cases2,the result should be 20
coins = [186,419,83,408]
amount = 6249
print(coinChange(coins,amount))
它应该为第二个测试用例返回20,但现在它是-1。 我不知道为什么我的代码适用于第一个测试用例而不是第二个测试用例 感谢
答案 0 :(得分:2)
我不确定您在dp[j] = min(dp[j],int(j/i)+dp[j%i])
尝试做什么,但它应该是dp[j] = min(dp[j],1+dp[j-i])
。原因是您可以使用金额j-i
添加此硬币以获得金额j
一枚硬币(此硬币)。