给定一个数组列表,数组列表的大小大于3,
ArrayList<ArrayList<Integer>> lists = new ArrayLists<ArrayList<Integer>>();
我想取3个唯一的子列表,找到它们的交集,然后对所有可能的组合重复这个过程。下面是伪代码
public void generateIntersections(ArrayLists<ArrayList<Integer>> lists) {
if (lists.size() > 3) {
int n = lists.size();
//number of combinations theoretically, `!` is wrong I know
int numberOfCombinations = n! / (3!(n - 3)!);
while (numberOfCombinations) {
// unique items
ArrayList<Integer> list 1 = lists.get(?);
ArrayList<Integer> list 2 = lists.get(?);
ArrayList<Integer> list 3 = lists.get(?);
Set<Integer> = intersection(list1, list2, list3);
}
}
}
我对这个问题感到困惑,因为我不知道如何在迭代时正确地跟踪三个计数器。在这种特殊情况下,我进一步被正确地实现组合的概念而不是排列的概念所阻碍。
我尝试过很多东西,但在每种情况下,我的代码很快就会变成废话。我想我缺少一些特别的技巧。可能是涉及哈希集的东西?
暂无答案!
目前还没有任何答案,快来回答吧!