有没有人有 Java 代码来生成所有重复的变化?
有大量可用的排列和组合示例,而变体必须是最简单的一种……浪费时间重新发明轮子感觉很愚蠢(为此必须编写大量代码)。
重复的变化的一个例子可能是这样的:
(tupletSize=3, input= A, B)
AAA, AAB, ABA, BAA, ABB, BAB, BBA, BBB
谢谢!
有没有人有 Java 代码来生成所有重复的变化?
有大量可用的排列和组合示例,而变体必须是最简单的一种……浪费时间重新发明轮子感觉很愚蠢(为此必须编写大量代码)。
重复的变化的一个例子可能是这样的:
(tupletSize=3, input= A, B)
AAA, AAB, ABA, BAA, ABB, BAB, BBA, BBB
谢谢!
这是按原样工作的,它对你来说是最容易学习的。
public class Main {
public static void main(String args[]) {
brute("AB", 3, new StringBuffer());
}
static void brute(String input, int depth, StringBuffer output) {
if (depth == 0) {
System.out.println(output);
} else {
for (int i = 0; i < input.length(); i++) {
output.append(input.charAt(i));
brute(input, depth - 1, output);
output.deleteCharAt(output.length() - 1);
}
}
}
}
public class Main {
public static void main(String[] args) throws IOException {
LinkedList<char[]> items = new LinkedList<char[]>();
char[] item = new char[3];
char[] input = {'A', 'B'};
rep(items, input, item, 0);
for (char[] rep : items) {
System.out.println(rep);
}
}
private static void rep(LinkedList<char[]> reps, char[] input, char[] item, int count){
if (count < item.length){
for (int i = 0; i < input.length; i++) {
item[count] = input[i];
rep(reps, input, item, count+1);
}
}else{
reps.add(item.clone());
}
}
}
产生以下输出: AAA AAB ABA ABB BAA BAB BBA BBB
注意大 tupleSize 的堆栈溢出。递归算法(比如这个)通常比迭代版本慢,但它们非常便于编码。