java - 如何进行这种组合?

标签 java string combinations nested-loops conditional-statements

我有一个由四个字母组成的字母串,例如 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/

相关文章:

java - 用于静态 html 文件和默认路径的 Spring Dispatcher servlet

algorithm - 序列与任何相邻产品的组合不超过给定数量

PHP 查找数组的所有(有点)唯一组合

java - 将数据发送回 Intent

java - 正则表达式 - 仅当前一部分匹配时才匹配此部分

Java 3d 编程 - 无法访问 3d 对象的更改位置

Python字符串列表2D

java - 如何在 Java 中解析这个字符串?

java - 将 double 格式设置为分数

java - 递归,每一步导出信息