this 的公认答案问题提供了一种算法的实现,给定两个数字 k 和 n 可以生成总和为 n 的 k 个正整数的所有组合(不包括排列)。
我正在寻找一种非常相似的算法,它基本上计算相同的东西,除了 k > 0 的要求被删除,即对于 k = 3,n = 4,输出应该是 [0, 0, 0, 4], [0, 0, 1, 3], ...(任意顺序)。
我已经尝试修改我链接的代码片段,但到目前为止我没有任何成功。我怎样才能有效地实现这个? (伪代码就足够了)
最佳答案
def partitions(Sum, K, lst, Minn = 0):
'''Enumerates integer partitions of Sum'''
if K == 0:
if Sum == 0:
print(lst)
return
for i in range(Minn, min(Sum + 1, Sum + 1)):
partitions(Sum - i, K - 1, lst + [i], i)
partitions(6, 3, [])
[0, 0, 6]
[0, 1, 5]
[0, 2, 4]
[0, 3, 3]
[1, 1, 4]
[1, 2, 3]
[2, 2, 2]
这段代码与链接答案的思路很接近,只是下限为0,相应的停止值n - size + 1
应该改变
关于algorithm - 找到总和为 n 的所有唯一的 k 个非负整数集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445667/