this问题的公认答案提供了一种算法的实现,该算法给出给定的两个数字k和n可以生成总和为n的k个正整数的所有组合(不包括置换)。
我正在寻找一种非常相似的算法,该算法本质上可以计算相同的东西,只是要求k> 0掉了,也就是说,对于k = 3,n = 4,输出应该是 [0,0,0,4],[0,0,1,3],...(按任何顺序)。
我尝试修改链接的代码段,但到目前为止,我没有任何成功。我如何有效地实现这一目标? (伪代码就足够了)
答案 0 :(得分:1)
bash
此代码非常接近链接答案的想法,只是下限为0,相应的停止值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]
应该更改
答案 1 :(得分:0)
您可以使用在提供的其他线程上提供的代码。
然后,您要将集合大小1的所有集合都设为k,如果您当前的集合大小小于k,则用0填充,即
fun nonZeroSums (k, n)
for i in 1 to k
[pad with i - k 0's] concat sum_to_n(i, n)