請原諒我,如果我搞砸了,這是我的第一個問題。我一直在解決這個問題幾個小時。它應該使用遞歸生成字符串中的所有子字符(不一定是子字符串)。我評論了很多,所以你可以看到我的想法,並希望告訴我哪裏出錯了。如果這有什麼不同,我將Eclipse用作IDE。使用遞歸生成字符串中的所有字符子集,JAVA
import java.util.ArrayList;
//Generates subsets of a string
public class SubsetGenerator
{
private String original;
private String remaining;
private ArrayList<String> subsets;
//Constructs a subset generator
//@param input string to have subsets generated
public SubsetGenerator(String input)
{
original = input;
remaining = original;
subsets = new ArrayList<String>();
}
public void printSubsets()
{
System.out.print(subsets);
}
//gets subsets
public void generateSubsets()
{
//if the string is empty, it has no subsets
if(remaining.length() == 1)
{
subsets.add(remaining);
return;
}
else
{
//remove the first character and hold onto it
String removed = remaining.substring(0,1);
remaining = remaining.substring(1);
//recursion. Eventually it should add the last character in the string to the ArrayList and return
generateSubsets();
//Take each element that is in the ArrayList, add the removed character to it, add this back to the list
for (int i = 0; i < subsets.size(); i++)
{
String temp = removed + subsets.get(i);
subsets.add(temp);
}
subsets.add(removed);//add the removed character by itself
return;
}
}
}
這是我得到的錯誤:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3221)
at java.lang.String.<init>(String.java:233)
at java.lang.StringBuilder.toString(StringBuilder.java:447)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:41)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGeneratorTester.main(SubsetGeneratorTester.java:7)
我使用此代碼測試它:
public class SubsetGeneratorTester
{
public static void main(String[] args)
{
SubsetGenerator s = new SubsetGenerator("world");
s.generateSubsets();
s.printSubsets();
}
}
它正在達到這個條件。 此行: 其餘= remaining.substring(1); 導致剩餘的字符串丟失第一個字母,所以它並不總是等於原來的。 – Tajha