【发布时间】:2021-07-13 21:51:14
【问题描述】:
给定一个硬币列表和一个正整数 n>0,我需要找到总和为 n 的排列数。列表中的每个硬币都可以多次使用。例如 - 给定以下列表:lst = [1,3,4] 和 n=4,函数应返回 4:for : [1,1,1,1], [1,3], [3,1 ] 和 [4]。 我被要求给出一个递归解决方案。 我知道如何编写计算组合数的递归代码,但我不知道如何编写计算排列数的代码。
这是我的代码:
def coin_change(lst, n):
if n == 0:
return 1
if len(lst) == 0:
return 0
if n<0:
return 0
return coin_change(lst, n-lst[0]) + coin_change(lst[1:], n)
谢谢
【问题讨论】:
-
你能展示你找到组合的方法吗?这可能是排列问题的一个很好的起点。
-
类似的问题已经不少了。您编写的一些代码已经有所帮助。然而,一种非常天真的方法是生成所有可能的排列,然后在返回递归时过滤掉那些与 n 不匹配的排列。
-
@Blckknght :我已将代码添加到帖子中
标签: python recursion coin-change