我想知道如何使用指定字符和长度
的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);
}
}
我只得到这个节目的576个单词,但是26个!单词是4.03291461×10 ^ 26
如何用java编写程序?
答案 0 :(得分:8)
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);
}
}
}
这会生成所有2个字母,3个字母,4个字母和5个字母的“单词”。它使用标准的递归算法。
在更多数学上,人们经常会混淆“排列”这个词的含义。是的,有26个! 26个字母a-z
的排列 - 这是 A LOT 字符串,但这不包括aa, ab
等。它包括所有字符串,其中26个字母各自出现一次
答案 1 :(得分:5)
考虑一下你在做什么: 你循环遍历第一个数组,并循环遍历第二个一次,每次迭代通过该循环。 那将会产生总计26 ^ 2的结果,或676(不是576)。 你构建输出的方式是非常具体的,检查你得到的东西,你会发现那里有一个高度明确的模式。
第二个阵列当然从未使用过,所以完全是多余的。
解决方案是在纸上写出如何手动尝试,然后尝试将其转换为代码。 对于一个你不希望只有特定长度的词(你得到的)或特定的字母模式(你也得到)。
答案 2 :(得分:3)
但是26岁!单词是4.03291461×1026如何用java编写程序
你不用Java或任何其他语言编写该程序。这将毫无意义,因为它需要花费数十亿年才能完成。
但是这个数字对于你在评论中的预期结果来说也是完全错误的。 26!是排列的数量,即在没有重复的情况下订购26个元素的不同方式。单词的数量为26 ^ n,其中n是长度。
答案 3 :(得分:-1)
这是我的解决方案。它很快,所以不要太过于优化。
public static void printWords(int length) {
if (length < 1)
throw new IllegalArgumentException();
printWordsRec("", length);
}
private static void printWordsRec(String base, int length) {
for (char c = 'a'; c <= 'z'; c++) {
if (length == 1) {
System.out.println(base + c);
}
else {
printWordsRec(base + c, length - 1);
}
}
}