我正在尝试遍历我的数组以生成给定 char 数组的所有可能组合。
如果我指定的长度是 4,那么我希望它遍历数组中字符的所有组合,直到长度为 4。
它看起来像这样:
char[] charArray = "abcdefghijklmnopqrstuvwxyz".toCharArray();
我想要的方法的输出:
a, b, c, ..., x, y, z, aa, ab, ac, ..., ax, ay, az, ba, bb, bc, ..., bx, by, bz, ca, cb, cc, ... zzzx, zzzy, zzzz
这是一些代码:
cs = charArray;
cg = new char[4]; // 4 up to 4 characters to guess
int indexOfCharset = 0; // should I be using all these?
int indexOfCurrentGuess = 0;
int positionInString = 0;
public void incrementNew() {
// 1 DIGIT guesses
if (cg.length == 0) {
if (indexOfCharset == cs.length) {
cg = new char[cg.length + 1];
} else {
cg[positionInString] = nextChar();
}
}
// 2 DIGIT guesses
else if (cg.length == 1) {
if (cg[0] == cs.length && cg[1] == cs.length) {
cg = new char[cg.length + 1];
} else {
... Something goes here <-
cg[positionInString] = nextChar();
}
}
System.out.println("cg[0]=" + cg[0]);
}
public char nextChar() {
char nextChar;
if (indexOfCharset < cs.length) {
nextChar = cs[indexOfCharset];
} else {
indexOfCharset = 0;
nextChar = cs[indexOfCharset];
}
indexOfCharset++;
//System.out.println("nextChar = " + nextChar);
return nextChar;
}
我能想到的唯一方法是使用大量 IF 语句 - 有没有一种算法或方法可以让它更整洁?如果没有,那么关于如何处理两个或更多字符的任何建议?
编辑:
我希望它适用于任何未排序的字符数组,而不仅仅是 az。
我发现的所有实现只适用于排序数组..