我正在学习Python,我有一个问题,这似乎是一个简单的任务。查找所有可能的子集总和给定的数
我想查找所有可能的总和给定数字的数字组合。
例如:4 - > [1,1,1,1] [1,1,2] [2,2] [1,3]
我挑选生成所有可能子集的解决方案(2^n),然后产生那些总和等于数量的那些。我的病情有问题。代码:
def allSum(number):
#mask = [0] * number
for i in xrange(2**number):
subSet = []
for j in xrange(number):
#if :
subSet.append(j)
if sum(subSet) == number:
yield subSet
for i in allSum(4):
print i
顺便说一句,这是一个好方法?
仅供参考,这些被称为[分区](http://en.wikipedia.org/wiki/Partition_%28number_theory%29) – interjay
为什么不从所需的数字开始,并减去数字? – Marcin
我认为这可以通过使用DP(Dinamic编程)更高效地完成,否则你会得到一个令人讨厌的复杂性。 – juliomalegria