Python 如何以N的和返回所有唯一的数字组合
我编辑了我的问题,因为我认为我解释得不好。当数字列表是随机的,但在我的情况下也能工作时,作为副本链接的子集和函数似乎是有效的。然而,对于像我下面的函数这样的大数来说,它似乎效率很低。我的问题是关于一个数字的列表,它总是基于N的值 如果N为10,则数字列表将为1到9或范围(1,N)。函数应返回从1到9的所有唯一数字组合,总和为10。在这种情况下,我下面的函数将解决这个问题并返回9,但是对于大的数字,这需要很长时间。在我看来,当数字的范围已知时,应该有更好的方法来解决这个问题,而不是必须迭代每个可能的组合。也许我错了Python 如何以N的和返回所有唯一的数字组合,python,Python,我编辑了我的问题,因为我认为我解释得不好。当数字列表是随机的,但在我的情况下也能工作时,作为副本链接的子集和函数似乎是有效的。然而,对于像我下面的函数这样的大数来说,它似乎效率很低。我的问题是关于一个数字的列表,它总是基于N的值 如果N为10,则数字列表将为1到9或范围(1,N)。函数应返回从1到9的所有唯一数字组合,总和为10。在这种情况下,我下面的函数将解决这个问题并返回9,但是对于大的数字,这需要很长时间。在我看来,当数字的范围已知时,应该有更好的方法来解决这个问题,而不是必须迭代每个可能
import itertools
def counter(n):
count = 0
l = range(1, n)
for i in range(1, n):
for c in itertools.combinations(l, i):
if sum(c) == n:
count += 1
return count
你搜索的是配分函数p。 退房
它包含的递归公式仅在输入方面是线性的 5+3+2也是可能的,所以它会返回9。啊,谢谢!我认为该函数工作正常,但在我输入问题时,我想不出最后一种可能性。我的问题是如何更有效地计算解,而不必迭代每一个可能的组合。这是一个,虽然在你的例子中是有序的,但它仍然是一个NP完全问题,所以你不能用简单的公式来解决它。一位成员不辞辛劳地写出了解决这个问题的代码:计算一些,比如范围(10,20)内的n,然后将序列放入oeis。org@zwer看起来一点也不像子集和。