试图[解决] 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
答案 0 :(得分:1)
你的逻辑不正确,你想做这样的事情:最低成本要么包含当前硬币,要么不包含。这将在伪代码中看起来像:
min_coins = current cost + min(cost without using this coin, cost using this coin)
因此您应该将当前费用存入您的州,并跟踪您可以使用哪些硬币。