【发布时间】:2020-09-08 21:21:10
【问题描述】:
给定一个列表; List<List<SomeType>> 其中内部列表可以是任何大小,外部列表是传递给函数的变量的大小,我需要找到包含元素的所有可能组合。
因为我的解释可能很糟糕,这里有一个输入和输出示例。
输入:
[
['a', 'b'],
['c', 'd', 'e', 'f'],
['g', 'h'],
['i']
]
输出:
[
['a', 'c', 'g', 'i'],
['a', 'c', 'h', 'i'],
['a', 'd', 'g', 'i'],
['a', 'd', 'h', 'i'],
['a', 'e', 'g', 'i'],
['a', 'e', 'h', 'i'],
['a', 'f', 'g', 'i'],
['a', 'f', 'h', 'i'],
['b', 'c', 'g', 'i'],
['b', 'c', 'h', 'i'],
['b', 'd', 'g', 'i'],
['b', 'd', 'h', 'i'],
['b', 'e', 'g', 'i'],
['b', 'e', 'h', 'i'],
['b', 'f', 'g', 'i'],
['b', 'f', 'h', 'i']
]
我完全不知道如何完成这项工作。我根本无法理解它,任何帮助将不胜感激。
【问题讨论】:
-
总排列可能非常大 - 我建议编写一个迭代器生成它们而不存储它们。这很简单,你只需要一个计数器数组,外部列表的大小,然后你就可以“计数”了。增加第一个计数器 - 它是否超过第一个列表的大小?重置它并增加下一个计数器(或“进位”)。当最后一个计数器超过最后一个列表的大小时,您就完成了所有操作。
-
Guava offers this as a library function - 它是开源的。因此,您可以使用它,也可以从代码中获取灵感。
标签: java arrays list arraylist multidimensional-array