有没有什么算法来实现输出这个组合? 输入:
ARR1 = {X,Y,Z}
ARR2 = {A,B}
输出:
XA,雅,ZA
XA,雅,ZB
XA,YB,ZA
XA,YB,ZB
XB,雅,ZA
XB,雅,ZB
XB,YB,ZA
XB,YB,ZB
解决方案
静态的char [] ARR1 = {'X','Y','Z'};
静态的char [] ARR2 = {'A','B'};
公共静态无效的主要(字串[] args){
打印(新的char [arr1.length - 1],0);
}
静态无效打印(的char []店,诠释深度){
对于(字符C:ARR2){
如果(深度LT; store.length){
店[深度] = C;
打印(存储,深度+ 1);
} 其他 {
的for(int i = 0; I< store.length;我++){
System.out.print(ARR1 [I] ++商店[I] +,);
}
的System.out.println(ARR1 [深度] ++ C);
}
}
}
编辑:忍不住尝试@ DenisKulagin的方法,所以这里有云:
公共静态无效的主要(字串[] args){
的char [] ARR1 = {'X','Y','Z'};
的char [] ARR2 = {'A','B'};
对(INT I = 0; I&。1所述;&所述; arr1.length;我++){
对于(INT J = 0; J< arr1.length; J ++){
INT倒= arr1.length - 1 - J;
INT指数=(ⅰ及(1&其中;&其中;倒))>>>倒;
System.out.print(ARR1 [J] +,+ ARR2 [指数] +,);
}
的System.out.println();
}
}
没有这么灵活,我的版本,因为 ARR2
只能包含两个元素,但绝对是一个聪明的做法。
Is there any algorithm to achieve this combination of output? Input :
arr1 = {x, y, z}
arr2 = {a, b}
Output :
xa, ya, za
xa, ya, zb
xa, yb, za
xa, yb, zb
xb, ya, za
xb, ya, zb
xb, yb, za
xb, yb, zb
解决方案
static char[] arr1 = {'x', 'y', 'z'};
static char[] arr2 = {'a', 'b'};
public static void main(String[] args) {
print(new char[arr1.length - 1], 0);
}
static void print(char[] store, int depth) {
for(char c : arr2) {
if(depth < store.length) {
store[depth] = c;
print(store, depth + 1);
} else {
for(int i = 0; i < store.length; i++) {
System.out.print(arr1[i] + "" + store[i] + ", ");
}
System.out.println(arr1[depth] + "" + c);
}
}
}
EDIT: Couldn't resist trying out @DenisKulagin's method, so here goes:
public static void main(String[] args) {
char[] arr1 = {'x', 'y', 'z'};
char[] arr2 = {'a', 'b'};
for(int i = 0; i < 1 << arr1.length; i++) {
for(int j = 0; j < arr1.length; j++) {
int inverted = arr1.length - 1 - j;
int index = (i & (1 << inverted)) >>> inverted;
System.out.print(arr1[j] + "" + arr2[index] + " ");
}
System.out.println();
}
}
Not quite as flexible as my version, since arr2
can only contain 2 elements, but definitely a clever approach.