以下是我正在尝试的操作。给定一个数字和一组数字,我想将该数字分成组中给出的数字(带有重复)。例如: 取数字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