查找所有与n相加的k个非负整数的唯一集合

时间:2019-03-31 21:35:46

标签: algorithm

this问题的公认答案提供了一种算法的实现,该算法给出给定的两个数字k和n可以生成总和为n的k个正整数的所有组合(不包括置换)。

我正在寻找一种非常相似的算法,该算法本质上可以计算相同的东西,只是要求k> 0掉了,也就是说,对于k = 3,n = 4,输出应该是 [0,0,0,4],[0,0,1,3],...(按任何顺序)。

我尝试修改链接的代码段,但到目前为止,我没有任何成功。我如何有效地实现这一目标? (伪代码就足够了)

2 个答案:

答案 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)