我正在學習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