我正在学习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
顺便问一下,这是一个好方法吗?
3,1,0,
和3,1,0,0
以及3,1,0,0,0,0,0,0,0...
都不行了? :) - corsiKa