【发布时间】:2015-02-12 07:41:02
【问题描述】:
有没有什么算法可以实现这种组合输出? 输入:
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
【问题讨论】:
标签: java algorithm combinations probability
有没有什么算法可以实现这种组合输出? 输入:
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
【问题讨论】:
标签: java algorithm combinations probability
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 个元素,但绝对是一个聪明的方法。
【讨论】:
【讨论】:
它可能是 2 次方 3(arr2.length 次方 arr1.length)。这应该给出行数。
因此,您需要一个计算每一行的算法。越短的给出数字,越长的给出指数。
【讨论】: