我正在编写一个递归过程以返回字符串的排列
我将所需的输出打印到控制台。但是,我想将输出添加到数组以能够对其进行进一步处理。我该如何实现?
import java.util.*;
public class Permutation {
public static void main(String args[]) {
permute("A", "BCD");
}
public static void permute(String FirstElement, String Remainder) {
List<String> mylist_tobuild = new ArrayList<String>();
if (Remainder.length() <= 1) {
FirstElement = FirstElement+Remainder;
// System.out.println(FirstElement);
mylist_tobuild.add(FirstElement);
System.out.println(mylist_tobuild);
}
else
for (int i = 0; i < Remainder.length(); i++) {
try {
String newString = Remainder.substring(0, i) + Remainder.substring(i + 1);
permute(FirstElement + Remainder.charAt(i), newString);
} catch (StringIndexOutOfBoundsException exception) {
exception.printStackTrace();
}
}
}
}
我得到:[ABCD] [ABDC] [ACBD] [ACDB] [ADBC] [ADCB]
我希望拥有:[ABCD,ABDC,ACBD,ACDB,ADBC,ADCB,]
答案 0 :(得分:4)
您可以提供List
作为参数:
public static void main(String args[]) {
List<String> perms = new ArrayList<>();
permute("A", "BCD",perms);
System.out.println(perms);
}
public static void permute(String FirstElement, String Remainder, List<String> perms) {
if (Remainder.length() <= 1) {
FirstElement = FirstElement+Remainder;
perms.add(FirstElement);
} else {
for (int i = 0; i < Remainder.length(); i++) {
try {
String newString = Remainder.substring(0, i) + Remainder.substring(i + 1);
permute(FirstElement + Remainder.charAt(i), newString, perms);
} catch (StringIndexOutOfBoundsException exception) {
exception.printStackTrace();
}
}
}
}
答案 1 :(得分:0)
每次使用permute方法时,您都在创建一个新列表。为了解决这个问题,您可以将列表创建从方法中删除(例如,创建静态字段),这样就不必在每次循环时都创建新列表。然后在主类的排列方法之后添加打印语句,以便获得最终结果。
private static ArrayList<String> mylist_tobuild;
public static void main(String args[]) {
mylist_tobuild = new ArrayList<>(); //initialize list here once
permute("A", "BCD");
System.out.println(mylist_tobuild);
}