我想知道如何使用指定字符和长度的java生成所有单词
String first[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String second[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String ch ="";
String total[];
for(int i = 0;i<26;i++) {
for(int j = 0;j<26;j++) {
ch+=first[i]+first[j];
System.out.println(ch);
}
}
Run Code Online (Sandbox Code Playgroud)
我只得到这个程序只有576个单词,但26个单词!单词是4.03291461×10 ^ 26
如何在java中编写程序?
public class Words {
static char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
static void generate(StringBuilder sb, int n) {
if (n == sb.length()) {
System.out.println(sb.toString());
return;
}
for (char letter : alphabet) {
sb.setCharAt(n, letter);
generate(sb, n + 1);
}
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int length = 2; length <= 5; length++) {
sb.setLength(length);
generate(sb, 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将生成所有2个字母,3个字母,4个字母和5个字母的"单词".它使用标准递归算法.
从更加数学的角度来看,人们经常会混淆"排列"这个词的含义.是的,有26个!26个字母的排列a-z- 这是很多字符串,但不包括aa, ab等等.它包括所有字符串,其中26个字母每个只出现一次.
考虑一下你正在做什么:你在第一个数组中循环一次,并在循环中每次迭代循环第二个数组.那将会产生总计26 ^ 2的结果,或676(不是576).你构建输出的方式是非常具体的,检查你得到的东西,你会发现那里有一个高度明确的模式.
第二个阵列当然从未使用过,所以完全是多余的.
解决方案是在纸上写出如何手动尝试,然后尝试将其转换为代码.对于一个你不希望只有特定长度(你得到)或特定字母模式(你也得到)的单词.