生成项目的所有唯一组合

时间:2014-01-29 08:05:44

标签: java algorithm unique combinations

我尝试生成所有可能的唯一项目组合。

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元素对和更多..

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