我尝试生成所有可能的唯一项目组合。
Ex: item1, item2, item3
Combinations:
item1+item2+item3
item1+item2
item1+item3
item2+item3
item1
item2
item3
我无法知道如何解决这个问题?
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
System.out.println(list.item(i)+list.item(j));
}
}
上述代码当然适用于两个元素的所有独特组合。但不是3元素对和更多..
答案 0 :(得分:7)
如果您有N个项目,则从1到2 ^ N-1计数。每个数字代表一个组合,如下所示:如果设置了位0(最低有效位),则item1在组合中。如果设置了位1,则item2在组合中,依此类推。
如果您不想要1项组合,请从3开始计数,并忽略2的幂(4,8,16等)的所有组合。
答案 1 :(得分:4)
guava有内置,如果这是一个选项
Set<Set<String>> result = Sets.powerSet(Sets.newHashSet("item1", "item2", "item3"));
for(Set<String> token : result){
System.out.println(token);
}
答案 2 :(得分:2)
以下Java解决方案使用 zmbq :
提出的位方法 public static void allComb(int n) {
BitSet bs = new BitSet();
while (bs.length() <= n) {
System.out.println(bs);
//Inc by 1
int pos = bs.nextClearBit(0);
bs.flip(0, pos + 1);
}
}