我有一个由四个字母组成的字母串,例如 ASDF,我想使用这些字母找到所有 3(三)个字母组合,并且三个字母组合不需要构成一个真正的单词。例如。
AAA AAS AAD AAF ADA ADS 添加 ADF ..................... SSA 固态硬盘 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 个,所以会更困难。 关于如何以更有效的方式完成这项工作有什么建议吗?
最佳答案
使用 recursive function .
像这样(未经测试,我的笔记本电脑上没有 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"
关于java - 如何进行这种组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414371/