Java 生成项目的所有唯一组合

Java 生成项目的所有唯一组合,java,algorithm,unique,combinations,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

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

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

for(int i=0;i如果有N个项目,则从1到2^N-1计数。每个数字表示一个组合,如下所示:如果设置了位0(最低有效位),则项目1在组合中。如果设置了位1,则项目2在组合中,依此类推


如果您不想要1项组合,从3开始计数,忽略所有2次方的组合(4、8、16等)。

以下Java解决方案使用了zmbq提出的bit方法:

  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);      
    }
  }
公共静态void allComb(int n){
位集bs=新位集();
如果可以的话,(bs.length()番石榴有这种内置功能

Set result=Sets.powerSet(Sets.newHashSet(“item1”、“item2”、“item3”);
for(设置令牌:结果){
System.out.println(令牌);
}

关于只包含一个项目的组合如何?请看我的答案,并说它是否有帮助。@assylias,这也是有效的组合。你也可以选择单个项目。我忘了说对不起,我不明白。有伪代码吗?你的算法的运行时间。运行时间是O(2^N)其中N是项目的数量。你无法打败它,因为有O(2^N)个组合。它会这么复杂吗?请你按照要求写下要打印的代码。挣扎:PIt一点也不复杂。无论如何,你自己试试,如果你在代码中挣扎,问另一个问题。但没有唯一的。
 Set<Set<String>> result = Sets.powerSet(Sets.newHashSet("item1", "item2", "item3"));
    for(Set<String> token : result){
        System.out.println(token);
    }