gpt4 book ai didi

java - 使用 ascii 表和一个循环的 Bruteforce 单词生成器

转载 作者:行者123 更新时间:2023-11-29 06:36:25 25 4
gpt4 key购买 nike

如何在 java 中创建一个“单词生成器”,它可以在 ascii 表的范围内为我提供所有可能的字符组合,并且具有一定的长度或更短的长度。

到目前为止,我所做的绝对是一团糟,而不是一个好的解决方案。它可以生成一系列字符(在此示例中为 48 到 57)的单词,但它的单词长度固定为 4。

for (int i = 48; i < 58; i++) {
for (int j = 48; j < 58; j++) {
for (int k = 48; k < 58; k++) {
for (int l = 48; l < 58; l++) {
String bruteword = "" + (char) i + (char) j + (char) k + (char) l;
}
}
}
}

希望大家明白我的意思。对不起,我总是很难用英语表达这些东西。

最佳答案

递归在这里可以提供帮助。假设你说 words(min, max, n) 给你一个列表,其中包含 n 长且字符在 min 之间的所有单词最大。你可以通过说如果 n = 0,唯一的词是空字符串来实现它;否则,您将通过将每个可能的字符附加到 words(min, max, n - 1) 来获得所有单词。

List<String> words(char min, char max, int n) {
List<String> ret = new ArrayList<String>();
if(n == 0) {
ret.add("");
return ret;
}
for(String word : words(min, max, n - 1)) {
for(char c = min; c <= max; ++c) {
ret.add(word + c);
}
}
return ret;
}

编辑:

同时生成所有可能性小于请求长度的迭代解决方案:

List<String> words(char min, char max, int n) {
List<String> ret = new ArrayList<String>();
ret.add("");
int start = 0;
for(int length = 1; length <= n; ++length) {
int end = ret.size();
for(int i = 0; i < end; ++i) {
for(char c = min; c <= max; ++c) {
ret.add(ret.get(i) + c);
}
}
start = end;
}
return ret;
}

编辑:

如果你不想保存的话,你肯定需要递归,因为你基本上是在用栈代替列表:

void words(char min, char max, int n) {
for(int i = 0; i <= n; ++i) {
wordsRecursive("", min, max, i);
}
}

void wordsRecursive(String base, char min, char max, int n) {
if(n == 0) {
System.out.println(base);
} else {
for(char c = min; c <= max; ++c) {
wordsRecursive(base + c, min, max, n - 1);
}
}
}

关于java - 使用 ascii 表和一个循环的 Bruteforce 单词生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934470/

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