是否有任何算法可以实现这种输出组合? 输入:
arr1 = {x, y, z}
arr2 = {a, b}
输出:
xa, ya, za
xa, ya, zb
xa, yb, za
xa, yb, zb
xb, ya, za
xb, ya, zb
xb, yb, za
xb, yb, zb
答案 0 :(得分:3)
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);
}
}
}
编辑:无法抗拒试用@ DenisKulagin的方法,所以这里有:
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();
}
}
不像我的版本那么灵活,因为arr2
只能包含2个元素,但绝对是一个聪明的方法。
答案 1 :(得分:1)
答案 2 :(得分:0)
它可能是2次幂3(arr2.length power arr1.length)。这应该给出行数。
因此,您需要一个计算每一行的算法。较短的一个给出数字,而较长的一个给出指数。