我目前正在尝试编写一些代码,给定硬币值列表,该代码将返回所有可能的硬币组合,总和为某个值。下面是程序应如何运行的示例:
>>> find_changes(4,[1,2,3])
[[1, 1, 1, 1], [2, 1, 1], [1, 2, 1], [3, 1], [1, 1, 2], [2, 2], [1, 3]]
我得到了以下代码模板来填写:
def find_changes(n, coins):
if n < 0:
return []
if n == 0:
return [[]]
all_changes = []
for last_used_coin in coins:
### DELETE THE "pass" LINE AND WRITE YOUR CODE HERE
pass
return all_changes
我尝试在for
循环中使用以下代码:
all_changes.append[last_used_coin]
find_changes(n-last_used_coin,coins)
它目前不起作用。我做错了什么?
您的答案很接近,但由于语法错误和逻辑错误的组合而失败。
请记住,append
是一个方法调用 - 您希望在括号周围添加一组括号,如下所示:
all_changes.append([last_used_coin])
# Add a list of one element to the `all_changes` list
但是,您的代码仍然不能正常工作。让我们尝试挑选代码。
如果我们查看您的for
循环,它会循环浏览您列表中所有可能的硬币。您采取了正确的下一步 - 您找到了所有可能的硬币组合,通过您的行find_changes(n - last_used_coin, coins)
n - last_used_coin
。
现在,您需要做的就是从调用find_changes
中遍历所有可能的硬币组合,重新添加last_used_coin
,并将所有内容附加到all_changes
列表中。
这是最终的工作代码:
def find_changes(n, coins):
if n < 0:
return []
if n == 0:
return [[]]
all_changes = []
for last_used_coin in coins:
combos = find_changes(n - last_used_coin, coins)
for combo in combos:
combo.append(last_used_coin)
all_changes.append(combo)
return all_changes
print find_changes(4, [1,2,3])