我有一个代码用于生成特定长度的字符串的排列,它不适用于 abcdefghijklmnopqrstuvwxyz 和输入 7
I have a code for generating permutation of a string of a particular length, its not working for abcdefghijklmnopqrstuvwxyz and input of 7
我收到以下输入的错误,请提供任何其他代码。
abcdefghijklmnopqrstuvwxyz
7
错误:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.lang.StringBuilder.toString(Unknown Source)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.main(c.java:37)
它适用于:
abcdefghijklmnopqrstuvwxyz
5
包 aaa;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
class c {
static int c;
List<String> permutations = new LinkedList<String>();
Scanner sc=new Scanner(System.in);
String input =sc.nextLine();
int conbinationSize = sc.nextInt();
boolean[] isChoosed = new boolean[input.length()];
public void generateCombination(String partialOutput) {
if (partialOutput.length() == conbinationSize) {
permutations.add(partialOutput);
c++;
return;
}
for (int i = 0; i < input.length(); ++i) {
if (!isChoosed[i]) {
isChoosed[i] = true;
generateCombination(partialOutput + input.charAt(i));
isChoosed[i] = false;
}
}
}
void printCombination() {
for (String c : permutations) {
System.out.println(c);
}
}
public static void main(String[] args) {
c dfs = new c();
dfs.generateCombination("");
dfs.printCombination();
System.out.println(c);
}
}
当 运行 的大小为 5 时,它会将 26*25*24*23*22=7 893 600 个字符串放入您的列表中。
当 运行 的大小为 7 时,它会尝试将 26*25*24*23*22*21*20 = 3 315 312 000 个字符串放入您的列表中。每个字符串都有一个 7 个字符的数组,因此大约 34 个字节。 运行 VM 时,您是否为 java VM 分配了 100GB?
实际上,您最好使用 generator/iterator 来创建组合和排列,传入一个对组合执行某些操作的函数而不是仅仅存储它,或者将它们写入流而不是操作他们在记忆中。
我收到以下输入的错误,请提供任何其他代码。
abcdefghijklmnopqrstuvwxyz
7
错误:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.lang.StringBuilder.toString(Unknown Source)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.generateCombination(c.java:24)
at aaa.c.main(c.java:37)
它适用于:
abcdefghijklmnopqrstuvwxyz
5
包 aaa;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
class c {
static int c;
List<String> permutations = new LinkedList<String>();
Scanner sc=new Scanner(System.in);
String input =sc.nextLine();
int conbinationSize = sc.nextInt();
boolean[] isChoosed = new boolean[input.length()];
public void generateCombination(String partialOutput) {
if (partialOutput.length() == conbinationSize) {
permutations.add(partialOutput);
c++;
return;
}
for (int i = 0; i < input.length(); ++i) {
if (!isChoosed[i]) {
isChoosed[i] = true;
generateCombination(partialOutput + input.charAt(i));
isChoosed[i] = false;
}
}
}
void printCombination() {
for (String c : permutations) {
System.out.println(c);
}
}
public static void main(String[] args) {
c dfs = new c();
dfs.generateCombination("");
dfs.printCombination();
System.out.println(c);
}
}
当 运行 的大小为 5 时,它会将 26*25*24*23*22=7 893 600 个字符串放入您的列表中。
当 运行 的大小为 7 时,它会尝试将 26*25*24*23*22*21*20 = 3 315 312 000 个字符串放入您的列表中。每个字符串都有一个 7 个字符的数组,因此大约 34 个字节。 运行 VM 时,您是否为 java VM 分配了 100GB?
实际上,您最好使用 generator/iterator 来创建组合和排列,传入一个对组合执行某些操作的函数而不是仅仅存储它,或者将它们写入流而不是操作他们在记忆中。