在Java的两个列表组合组合、两个、列表、Java

2023-09-11 23:19:02 作者:爱我的人会发光i

有没有什么算法来实现输出这个组合? 输入:

  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);
        }
    }
}
 
大家都是编程语言,为什么你Java这么优秀

编辑:忍不住尝试@ 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.