从数组生成唯一的组合,但每个组合中包含每个元素。 (Java)的

时间:2012-06-22 18:40:14

标签: java combinations

我试图从数组中生成每个可能的唯一组合,但它不像生成所有组合那样简单.....例如。我有一个数组{a,b,c,d,e,f} ......我的结果应该是这样的......

  1. ab,cd,ef
  2. abc,def
  3. ac,bd,ef
  4. abcf,ed
  5. .... etc
  6. ......基本上在每个结果集中都应包含数组的所有元素....'ab'与'b'相同,'abcd'与'dcba'或'相同cbda'....这个位置并不重要......并且不允许重复......'aaa'或'aa'无效...如果有人能为这个问题提供解决方案,我将不胜感激...... 。

2 个答案:

答案 0 :(得分:0)

 String [] new_array=new String[N];
 array.length=length.of("befdac");
 for(int i=0;i < array.length;i++) //this is first digit

{

for(int j=0;j < array.length;j++) //this is second digit
{
if(i==j)continue;
       ................ same with other digits

        {
         if((i==j)||(i==k)) continue;
        // start counting in this most inner block
        new_array[i][j][k][l]...[last_digit]=byte(i+65)+byte(j+65)+byte(k+65)+.....+byte(last_digit+65);
        //65=a, 66=b,......

         }
 }
}

new_array [] [] [] [] ... []将是你的代码,我没试过。最好的事情你自己做。这不是优化的。只是为第一个答案获得了一些积分

答案 1 :(得分:0)

我建议您构建所有可能的唯一设置尺寸集。然后在所有可能的订单中插入所有可能的值。例如,使用5个可能的值,您可以设置大小:

1 1 1 1 1
1 1 1 2
1 2 2
1 1 3
1 4
2 3
5

现在,将实际值放入集合中。对于第一组设定尺寸,我们得到:

a, b, c, d, e

这不是很有趣,因为所有的集都是相同的大小,所以跳到第三组集合大小。在这里,我们填充集合然后转移它们,给我们:

a, bc, de
b, cd, ea
c, de, ab
d, ea, bc
e, ab, cd

这不是一个完整的解决方案,但我已将问题分成两部分,我认为你可以从中解决问题。