生成每个可能的整数区间

Generate every possible intervals of integers

尽管我进行了研究,但我没有找到解决问题的办法。感谢您的帮助!

设a和b为两个整数。我想生成整数的所有子区间,无论它们在这两个整数之间的长度如何。

比如设a=2,b=5,我尝试得到的结果是:

[
 [[2],[3],[4],[5]
 [[2,5]],
 [[2],[3,5]],
 [[2],[3,4],[5]],
 [[2],[3],[4,5]],
 [[2,3],[4,5]],
 [[2,3],[4],[5]],
 [[2,4],[5]]
]

感谢您的帮助,

此致!

我写了一个方法来完成你的要求。看起来不是很漂亮,但它完成了工作。

def subIntervals(a,b):
    outputList = [[[a]]]
    for n in range(a+1, b+1):
        newOutputList = []
        for e in outputList:
            newOutputList.append(e + [[n]])
            newOutputList.append(e[:-1] + [[e[-1][0], n]])
        outputList = newOutputList
    return outputList

如果需要我会添加解释。

您可以使用函数生成从最接近 a 的数字(即 a 本身)到 b 的区间,然后递归地生成从 [=16= 的区间] 到 b:

def intervals(a, b):
    if a > b:
        yield []
    for i in range(a, b + 1):
        for interval in intervals(i + 1, b):
            yield [[a] if a == i else [a, i], *interval]

这样:

list(intervals(2, 5))

returns:

[[[2], [3], [4], [5]],
 [[2], [3], [4, 5]],
 [[2], [3, 4], [5]],
 [[2], [3, 5]],
 [[2, 3], [4], [5]],
 [[2, 3], [4, 5]],
 [[2, 4], [5]],
 [[2, 5]]]