【问题标题】:Generate every possible intervals of integers生成所有可能的整数区间
【发布时间】:2019-07-19 20:43:28
【问题描述】:

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

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

比如让a=2 and 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]]
]

感谢您的帮助,

最好的问候!

【问题讨论】:

  • 如果可以接受单值列表,为什么不包括[[2], [3], [4], [5]]
  • 是的!这个我忘了!谢谢!
  • 请编辑问题并添加缺失值。
  • 您可能缺少 [[2,3], [4]], [[2], [3,4]] 等
  • @yuvrajzohan 5 呢?

标签: python python-3.x list integer intervals


【解决方案1】:

我写了一个方法来满足你的要求。看起来不是很漂亮,但它确实有效。

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

如果需要,我会添加解释。

【讨论】:

    【解决方案2】:

    您可以使用一个函数来生成从最接近a(即a 本身)的数字到b 的区间,然后递归生成从a + 1b 的区间:

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

    返回:

    [[[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]]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多