gpt4 book ai didi

java - 遍历 Java 中的字符数组 - 改进算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:05 26 4
gpt4 key购买 nike

我正在尝试遍历我的数组以生成给定 char 数组的所有可能组合。

如果我指定的长度是 4,那么我希望它遍历数组中字符的所有组合,直到长度为 4。

它看起来像这样:

char[] charArray = "abcdefghijklmnopqrstuvwxyz".toCharArray();

我想要的方法输出:

一个,乙,C,...,X,是的,,啊,ab,交流,...,斧头,哎,啊,巴,bb,公元前,...,bx,经过,bz,加州,,抄送,...zzzx,兹兹,呜呜呜

这是一些代码:

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 语句 - 是否有算法或方法可以使它更整洁?如果没有,那么关于如何处理两个或更多字符有什么建议吗?

编辑:

我希望它适用于任何未排序的字符数组,而不仅仅是 a-z。

我发现的所有实现都只适用于排序数组..

最佳答案

你可以试试这个:

static char[] letters = "abcdefghijklmnopqrstuvwxyz".toCharArray();

static void getChars(char[] lastChars, int pos, int length) {
for (char c : letters) {
char[] newChars = lastChars.clone();
newChars[pos] = c; // if you have "aa" for example and the current length is 4. If c = "a", newChars is now "aaa"
if (pos + 1 < length) { // as your lenths is 4 and you still have only 3 letters, getChars adds the missing ones
getChars(newChars, pos + 1, length);
} else {
System.out.println(newChars);
}
}
}

public static void main(String[] args) {
int maxLength = 4;

for (int length = 1; length <= maxLength; length++) {
for (char c : letters) {
if (length > 1) {
char[] chars = new char[length];
chars[0] = c;
getChars(chars, 1, length);
} else {
System.out.println(c);
}
}
}

}

关于java - 遍历 Java 中的字符数组 - 改进算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com