如何在递归内将字符串输出添加到数组

时间:2019-03-27 11:43:47

标签: java recursion

我正在编写一个递归过程以返回字符串的排列

我将所需的输出打印到控制台。但是,我想将输出添加到数组以能够对其进行进一步处理。我该如何实现?

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,]

2 个答案:

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