algorithm - 找到总和为 n 的所有唯一的 k 个非负整数集

标签 algorithm

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/

相关文章:

javascript - 隔离嵌套数组中的数组元素,并将其用作 JSON 字段值,并将其兄弟数组元素用作字段值

arrays - 所有数组元素对乘积的总和

php - 模式字符串替换算法(php + regexp)

c# - 欧拉计划 #21

c - 遍历和比较数组的子集

c++ - 在 C/C++ 中进行大文本关键字搜索的最快方法

javascript - 总价计算器逻辑难度

arrays - 算法帮助 : how to divide array into N segments with least possible largest segment (balanced segmenting)

algorithm - 添加新点时如何避免重复线性回归过程

python - 使用 networkx 从图中删除边