Recursion 调试换币动态规划
我的硬币兑换动态编程实现在一些测试用例中失败,我很难找出原因: 问题陈述:给定一个数量和一个硬币列表,找出制造该数量所需的最小硬币数量 例如:Recursion 调试换币动态规划,recursion,dynamic-programming,Recursion,Dynamic Programming,我的硬币兑换动态编程实现在一些测试用例中失败,我很难找出原因: 问题陈述:给定一个数量和一个硬币列表,找出制造该数量所需的最小硬币数量 例如: 目标金额:63 硬币清单:[1,5,10,21,25] 输出:[21,21,21] def coin_change(change_list, amount, tried): if amount <= 0: return [] if amount in change_list: return [amou
目标金额:63
硬币清单:[1,5,10,21,25]
输出:[21,21,21]
def coin_change(change_list, amount, tried):
if amount <= 0:
return []
if amount in change_list:
return [amount]
if amount in tried:
return tried[amount]
coin_count = []
for change in change_list:
if change < amount:
changes = coin_change(change_list, amount-change, tried)
changes.append(change)
coin_count.append(changes)
min_changes = coin_count[0][:]
for x in coin_count[1:]:
if len(min_changes) >= len(x):
min_changes = x[:]
tried[amount] = min_changes[:]
return min_changes
def main():
for amount in range(64):
changes = coin_change([1, 5, 10, 21, 25], amount, {})
if sum(changes) != amount:
print "WRONG: Change for %d is: %r" % (amount, changes)
else:
# print "Change for %d is: %r" % (amount, changes)
pass
if __name__ == "__main__":
main()
def硬币兑换(兑换清单、金额、已尝试):
如果金额=len(x):
最小变化=x[:]
已尝试[金额]=最小更改数[:]
返回最小值更改
def main():
对于范围(64)内的金额:
零钱=硬币零钱([1,5,10,21,25],金额,{})
如果总和(变化)!=数量:
打印“错误:%d的更改为:%r”%(金额,更改)
其他:
#打印“对%d的更改为:%r%”(金额,更改)
通过
如果名称=“\uuuuu main\uuuuuuuu”:
main()
韦小宝:您在循环过程中附加变量,从而损坏了变量,
更改了它。试试这个:
替换这两行:
changes.append(change)
coin_count.append(changes)
与:
_changes = changes[:] + [change]
coin_count.append(_changes)