我有6个数组,每个数组有8个元素。我想写一个方法,揭示所有数组的所有元素的所有可能组合,如:
firstArray firstElement, secondArray firstElement,.... sixthArray firstElement
firstArray SECONDElement, secondArray firstElement,.... sixthArray firstElement
.... etc...
firstArray lastElement, secondArray lastElement,.... sixthArray lastElement
我怎样才能以最高效的方式做到这一点? (性能最友好的方式?)
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < B.length; j++) {
for (int h = 0; h < C.length; h++) {
for (int k = 0; k < D.length; k++) {
for (int l = 0; l < E.length; l++) {
for (int n = 0; n < F.length; n++) {
System.out.println(A[i] + " "
+ B[j] + " "
+ C[h] + " "
+ D[k] + " "
+ E[l] + " "
+ F[n]);
}
}
}
}
}
}
答案 0 :(得分:4)
最简单的代码是 -
for(first array a){
for(second array b){
for(third array c){
for(fourth array d){
for(fifth array e){
for(sixth array f){
System.out.println(a[], b[], c[], d[], e[], f[]);
}
}
}
}
}
}
这不是很好的表现,因为它需要 - 不。每个数组的数组*元素*每个数组时间的元素。
答案 1 :(得分:3)
这很快成为了常见问题解答,但对于我的生活,我找不到正确的问题,这是重复的,所以这里是FPA(经常提供的答案)。
依次从000000到777777生成所有6位数的基数为8的数字。每个数字指定您要查找的一个集合:第一个数字标识第一个数组的元素,第二个数字标识第二个数组的元素,等等。
这应该足以让你入门,我用Java提供的任何“帮助”都会被嘲笑。这是否比你已经拥有的答案更好(或者实际上与它有实质性的不同),我会让你和其他人去判断。
为了将来参考,您正在尝试计算6个阵列的笛卡尔积。至于这些方法的效率,很好地计算n个元素中的每一个的2个笛卡尔乘积是O(n ^ 2)并且通过巧妙的编程没有解决这个问题。因此,对于6组,n个元素中的每一个,计算复杂度将为O(n ^ 6)。