我如何才能得到一个ndarray,它包含将一定数量的元素添加到N的不同方法



例如,假设我有一个由3个元素(自然数(组成的链,并且我固定了N=2。我想要的是,以矩阵或2D阵列的形式,找到排列这些元素的不同方式,使它们加起来为2。在这种情况下,我们会有:

[
[0,0,2],
[0,2,0],
[2,0,0],
[0,1,1],
[1,1,0],
[1,0,1]
]

请注意,每行(长度为3(的总和为2。我想将这种行为推广到任意数量元素和N.的情况

我想知道是否有一种有效的方法可以在python 中实现这种算法

def ways_of_adding_up_to_n(number, elements, stack = []):
if elements == 2:
result = [[i, number - i] for i in range(number + 1)]
if stack != []:
result = [stack + result[i] for i in range(len(result))]
return result
else:
result = []
for i in range(number + 1):
result.extend(ways_of_adding_up_to_n(number - i, elements - 1, stack + [i]))
return result
print(ways_of_adding_up_to_n(2, 3))

最新更新