gpt4 book ai didi

python - 为什么这个解决方案不适用于硬币找零算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:57:51 25 4
gpt4 key购买 nike

编写一个程序,给定要找零的数量 N 和 m 种无限可用硬币的类型数量,以及 m 种硬币的列表,打印出从这些硬币到 STDOUT 的找零方式有多少种。

我的直觉是,对于每个硬币,尝试那个硬币,然后递归 n - c,其中 c 是硬币的值(value),如果我达到零则返回 1,如果我低于零则返回 0。我传入了之前使用过的硬币,并且只对小于或等于之前硬币的硬币进行递归,以防止重复。我很困惑为什么这种方法不正确,以及我该如何纠正它。

这是我的代码:

def calc_change(n, coins):
cache = {}
c = max(coins)
nums = calc_ways(n, coins, cache, c)
return nums

def calc_ways(n, coins, cache, current_coin):
if n < 0:
return 0
if n == 0:
return 1
if n not in cache:
cache[n] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
return cache[n]

answer = calc_change(n, coins)
print answer

感谢您的帮助。

最佳答案

您正在根据要添加到 n 的数量索引 cache。问题是相同 n 的组合数量可能会根据您要考虑的硬币组而变化。 (例如 n=10coins=[10,5] 有两种可能的组合,但是 n=10coins=[ 5]只有一种组合。你需要你的缓存考虑current_coin变量。

def calc_change(n, coins):
cache = {}
c = max(coins)
nums = calc_ways(n, coins, cache, c)
return nums

def calc_ways(n, coins, cache, current_coin):
if n < 0:
return 0
if n == 0:
return 1
if (n,current_coin) not in cache:
cache[(n,current_coin)] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
return cache[(n,current_coin)]

answer = calc_change(n, coins)
print answer

关于python - 为什么这个解决方案不适用于硬币找零算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com