python - 如何生成数字范围的所有组合

标签 python c algorithm combinations

我有多个数字范围,例如 [1->5]、[1->3] 和 [1->2]。范围和边界的数量是可变的。

生成所有可能的组合的算法(最好是 C 代码)是什么,例如例如上面的例子:
1 - 1 - 1
1 - 1 - 2
1 - 2 - 1
1 - 2 - 2
1 - 3 - 1
1 - 3 - 2
2 - 1 - 1
...

谢谢。

最佳答案

这必须是递归的。 python 中的示例代码是:

def variads(lst, lstsofar):
    offset = len(lstsofar)
    outerlen = len(lst)
    innerLst = lst[offset]
    printit = False
    if offset == (outerlen - 1):
        printit = True
    for item in innerLst:
        if printit:
            print (lstsofar + [item])
        else:
            variads(lst, lstsofar + [item])
    return

要调用它,您需要传递一个列表列表:

>>> variads([[1, 2, 3, 4, 5], [1, 2, 3], [1, 2]], [])
[1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[1, 2, 2]
[1, 3, 1]
[1, 3, 2]
[2, 1, 1]
[2, 1, 2]
[2, 2, 1]
[2, 2, 2]
[2, 3, 1]
[2, 3, 2]
[3, 1, 1]
[3, 1, 2]
[3, 2, 1]
[3, 2, 2]
[3, 3, 1]
[3, 3, 2]
[4, 1, 1]
[4, 1, 2]
[4, 2, 1]
[4, 2, 2]
[4, 3, 1]
[4, 3, 2]
[5, 1, 1]
[5, 1, 2]
[5, 2, 1]
[5, 2, 2]
[5, 3, 1]
[5, 3, 2]

上面将处理可变数量的范围。范围在对 variads 的调用中扩展。如果您只有最大值和最小值,您可以编写一个辅助函数来扩展范围,然后调用 variads

关于python - 如何生成数字范围的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681797/

相关文章:

java - 迷宫路径搜索 DFS java

Java:如何实现 N-Queens?

python - 递归地在每个深度绘制带有颜色的谢尔宾斯基三角形?

Python 的 string.maketrans 在家工作但在 Google App Engine 上失败

c - STM32F103RC TIM3 不工作

c - 在 C 中使用大小为 10 的一维数组添加偶数

c - 如何在C中打印内存地址

python - 信号未从线程传递到 GUI

python - K 均值聚类 [TypeError : __init__() got an unexpected keyword argument 'k' ]

javascript - TF-IDF语料库是否可以使用色散