以下是我正在嘗試的操作。給定一個數字和一組數字,我想將該數字分成組中給出的數字(帶有重複)。例如: 取數字9,而數字集= {1,4,9}。它將產生以下分區:將數字分隔成給定的一組數字
{(1,1,1,1,1,1,1,1),(1,1,1,1,1,4),(1,1,1,1,1,1),(1,1,1,1,1,1,1) 4,4),(9)}
使用集合{1,4沒有其它可能的分區,9}不能形成總結9.
我在Python寫的函數的數量,其做任務:
S = [ 1, 4, 9, 16 ]
def partition_nr_into_given_set_of_nrs(nr , S):
lst = set()
# Build the base case :
M = [1]*(nr%S[0]) + [S[0]] * (nr //S[0])
if set(M).difference(S) == 0 :
lst.add(M)
else :
for x in S :
for j in range(1, len(M)+1):
for k in range(1, nr//x +1) :
if k*x == sum(M[:j]) :
lst.add( tuple(sorted([x]*k + M[j:])))
return lst
它工作正常,但我想看到它的一些意見。我對它使用3個循環的事實並不滿意,我想它可以以更優雅的方式進行改進。也許在這種情況下遞歸更適合。任何建議或更正將不勝感激。提前致謝。
16'in S' is correct? –
是的,因爲它會忽略它,因爲它大於9,是要分區的數字。該功能適用於或不適用。較大的數字不能成爲分區的一部分。 – youth4ever