-1

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

  1. ab、cd、ef
  2. 美国广播公司,定义
  3. 交流、BD、EF
  4. 美国广播公司,编辑
  5. ....ETC

......基本上在每个结果集中都应该包含数组的所有元素......而且 'ab' 与 'ba' 相同, 'abcd' 与 'dcba' 或 'cbda' 相同。 ...位置无关紧要....并且不允许重复...'aaa'或'aa'无效...如果有人可以为这个问题提供解决方案,将不胜感激...。

4

2 回答 2

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

这不是一个完整的解决方案,但我将问题一分为二,我认为您可以从那里着手。

于 2012-06-22T23:19:37.023 回答
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[][][][]...[] 将是我没有尝试过的代码。最好的事情你自己做。这没有优化。刚做第一个答案以获得一些分数

于 2012-06-22T18:57:59.633 回答