那么,我有这段代码,它接受类似printAllPossibilities("1234", 2)的东西,并打印长度为2的字符串的所有组合。
我希望它能够找到所有可能的组合(对于另一部分,我将在稍后添加)并计算找到的组合总数。我试着在for循环中添加一个计数器,但它似乎没有按照我应用它的方式工作。任何想法都很感激!
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));
}
如果我正确理解了您的代码,您可以执行以下操作:
static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
}
// declare counter
static int counter = 0;
static void printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
// increment counter
counter += 1;
return;
}
for (int i = 0; i < charSet.length(); i++)
printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}
当你认为合适时输出counter
。
您可以通过这种方式计算组合的数量
static void printAllPossibilities(String charSet, int length) {
int cnt = printAllPossibilities_(charSet, length, "");
System.out.println(cnt);
}
static int printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
return 1;
}
int res = 0;
for (int i = 0; i < charSet.length(); i++) {
res += printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}
return res;
}
也可以用Permutations with Repetition
公式
static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
int cnt = (int) Math.pow(charSet.length(), length);
System.out.println();
System.out.println(cnt);
}