最小硬币改变类给出了错误答案

时间:2018-02-11 06:00:33

标签: python algorithm coin-change

试图[解决] leetcode(322)中的问题:

  

您将获得不同面额和总金额的硬币   金额。编写一个函数来计算最少数量的硬币   你需要弥补这个数额。如果那笔钱不能   由任何硬币组合组成,返回-1。

我被困在这个输入中:coins = [2]和target = 3

我想知道它为什么会返回0?我调试了这个,但无法搞清楚。

class Solution(object):
    def coinChange(self, coins, amount):
        """
        :type coins: List[int]
        :type amount: int
        :rtype: int
        """
        def get_cost(coins, amount):
            if amount == 0:
                return 0
            min_cost = float('inf')
            for coin in coins:
                if amount >= coin:
                    min_cost = min(min_cost, 1 + self.coinChange(coins, amount - coin))
            return min_cost

        cost = get_cost(coins, amount)
        if cost == float('inf'):
            return -1
        return cost

1 个答案:

答案 0 :(得分:1)

你的逻辑不正确,你想做这样的事情:最低成本要么包含当前硬币,要么不包含。这将在伪代码中看起来像:

min_coins = current cost + min(cost without using this coin, cost using this coin)

因此您应该将当前费用存入您的州,并跟踪您可以使用哪些硬币。