为什么我的代码无法通过LeetCode 322 Coin Change的测试用例?

时间:2017-01-05 07:08:13

标签: python algorithm dynamic-programming

问题的链接: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。 我不知道为什么我的代码适用于第一个测试用例而不是第二个测试用例 感谢

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一枚硬币(此硬币)。