如何制作这种组合?

时间:2013-12-06 01:37:56

标签: java string combinations nested-loops conditional-statements

2 个答案:

答案 0 :(得分:1)

使用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"

答案 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));
        }
    }
}