【发布时间】:2021-12-16 12:34:10
【问题描述】:
问题说:
给定一个整数数组coins,表示不同面额的硬币,>一个整数表示总金额。 返回您需要的最少数量的硬币来弥补该金额。如果该金额不能由任何硬币组合组成,则返回-1。'
这是我正在尝试的:
def coinChange(coins, amount, final_list=[]):
"""
:type coins: List[int]
:type amount: int
:rtype: int
"""
if all(coins) > amount:
return -1
while amount > 0:
if amount - max(coins) >= 0:
amount -= max(coins)
final_list.append(max(coins))
else:
return coinChange(coins.remove(max(coins)), amount, final_list)
return len(final_list)
coins = [1,2,5]
amount = 11
coinChange(coins, amount)
有人可以帮忙吗
【问题讨论】:
-
if all(coins) > amount不正确。all()返回True或False,将其与amount进行比较是没有意义的。 -
你不应该使用可变类型作为默认参数。 final_list=[] 不会做你想做的事;执行
final_list = None之类的操作并在体内执行if final_list is None: final_list = [] -
请发布完整的回溯,以便我们轻松查看错误。请注意,
def coinChange(coins, amount, final_list=[]):创建一个空列表作为final_list的默认值,并且该列表始终用作默认值。所有使用默认值对coinChange的调用都将附加到该列表中。 -
coins.remove(max(coins))修改coins列表并返回None。这就是错误的原因。 -
不要羞于添加打印语句,显示您在执行过程中计算的值。这是遵循执行流程的好方法。此外,许多 IDE 都有调试器,它们对此非常有用。或者去老学校,使用 python 的
pdb行调试器。
标签: python recursion dynamic-programming