我试图从数组中生成每个可能的唯一组合,但它不像生成所有组合那样简单.....例如。我有一个数组{a,b,c,d,e,f} ......我的结果应该是这样的......
......基本上在每个结果集中都应包含数组的所有元素....'ab'与'b'相同,'abcd'与'dcba'或'相同cbda'....这个位置并不重要......并且不允许重复......'aaa'或'aa'无效...如果有人能为这个问题提供解决方案,我将不胜感激...... 。
答案 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
这不是一个完整的解决方案,但我已将问题分成两部分,我认为你可以从中解决问题。