【发布时间】:2019-04-19 09:21:56
【问题描述】:
我们有一个元素列表[A,B,C,D,E]和3组来组合这些元素,我想打印一个列表所有这 3 组没有重复的独特组合。只有长度组 [2,2,1] 是有效的(它可以在之后被过滤,这不是必须的,但它会很有效,并且如果需要,可以手动指定组的长度作为参数)。我的意思是独特而不重复:
[[A,B],[C,D],[E]] 和 [[C,D],[A,B],[E]] 和 [[B,A],[C,D ],[E]] 将是相同的,因此组内元素的顺序或组的顺序无关紧要,我对这些组合不感兴趣。
在我的特定情况下,我有 16 个项目和 3 组,每组 5、5 和 6 个项目。
我想要实现的一个例子:
/**
* Returns all the unique combinations of a group into multiple groups
* [data] the group of elements to combine
* [numberOfGroups] the number of groups
*/
fun combinations(data: List<String>, numberOfGroups: Int): List<List<List<String>>> {
// The combinations code
}
val data = listOf("A", "B", "C", "D", "E")
print(combinations(data, 3))
输出将是这样的:
[
[[A,B],[C,D],[E]],
[[A,D],[B,C],[E]],
...
]
提前谢谢你。
【问题讨论】:
-
到目前为止你尝试过什么?你被困在哪里了?
-
@Nikolas 首先我尝试自己提出解决方案,要么太复杂,要么我不够聪明(我也没有数学背景)。我发现了 n! / (r!(n−r)!) 组合的公式,但我认为它不适用于这里,我尝试了 Guava 库中的 Sets.powerSet(Sets.newHashSet(myItemsList))。我也花了几个小时寻找示例,但没有一个适用。
标签: java kotlin unique combinations