我有四个字母的字母串,例如ASDF,我希望使用这些字母找到所有3(3)个字母组合,并且三个字母组合不需要形成真正的单词.Ex。
AAA AAS AAD AAF ADA ADS添加ADF ............... SSA SSD SSF SSS我是Java的新手,刚学会了如何使用String类并使用循环和条件语句。我知道如何做到这一点的唯一方法是通过大量且非常繁琐的for循环和if语句来解释可能出现的每种可能性。这看起来像是:
public static void main(String[] args)
{
String combo = "";
for(int counter = 1; counter <= 16; counter++){
combo = "A";
if(counter == 1){
combo = combo + "AA";
}
// This would continue on for all the possibilities starting with "A" and
// then move on to "S" as the lead character
}
}
我知道这是解决这个问题的最糟糕的方法之一,但我真的很担心如何以另一种方式做到这一点。如果我有3个字母并制作3个字母的组合会更容易,因为我可以从数组中获取每个字母并重新排列它们,但由于我只使用4个字母中的3个字母,因此更难。 有关如何以更有效的方式完成此任务的任何建议吗?
答案 0 :(得分:1)
像这样(未经过测试,我的笔记本电脑上没有Java编译器)。 使用StringBuilder可能会提升性能。
static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
}
static void printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
return;
}
for (int i = 0; i < charSet.length(); i++)
printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}
用法:
printAllPossibilities("ASDF", 4); // Print all 4-letter combinations out of "ASDF"
printAllPossibilities("bar", 2); // Print all 2-letter combinations out of "bar"
答案 1 :(得分:0)
对于一般情况(M中的N个字符的所有组合),@ Qntm的解决方案正是您所需要的......但是,如他所说的那样使用StringBuilder,只需更改最后一个字符而不是构造字符串比如'temp + charSet.charAt(i)'。
如果你需要N个正好3个字符,那么只做3个嵌套循环就更容易了:
for (int char1 = 0; char1 < charSet.length(); char1++) {
for (int char2 = 0; char2 < charSet.length(); char2++) {
for (int char3 = 0; char3 < charSet.length(); char3++) {
System.out.println(""+charSet.charAt(char1)+charSet.charAt(char2)+charSet.charAt(char3));
}
}
}