我正在学习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
BTW是个好方法吗?
这是几年前我看到的一些实现此目的的代码:
>>> def partitions(n): if n: for subpart in partitions(n-1): yield [1] + subpart if subpart and (len(subpart) < 2 or subpart[1] > subpart[0]): yield [subpart[0] + 1] + subpart[1:] else: yield [] >>> print list(partitions(4)) [[1, 1, 1, 1], [1, 1, 2], [2, 2], [1, 3], [4]]
其他参考: