Recursion 在编写“回文分区”的递归解决方案时,不确定如何传递ArrayList

Recursion 在编写“回文分区”的递归解决方案时,不确定如何传递ArrayList,recursion,palindrome,Recursion,Palindrome,问题陈述: 以下是我所拥有的: import java.util.*; public class palindromepartition { static List<ArrayList<String>> answers = new ArrayList<ArrayList<String>>(); private static void palindromepartition(ArrayList<String> ad

问题陈述:

以下是我所拥有的:

import java.util.*;

public class palindromepartition {

    static List<ArrayList<String>> answers  = new ArrayList<ArrayList<String>>();

    private static void palindromepartition(ArrayList<String> addedSoFar, String prefix, String remaining) {

        if (remaining.length()==0){
            answers.add(addedSoFar);
            return;
        }

        int n = remaining.length();

        for (int i = 0; i < n; i++){    

         if (isPalindrome(remaining.substring(0,i+1))){
            addedSoFar.add(remaining.substring(0,i+1));
            palindromepartition(addedSoFar, remaining.substring(0,i+1), remaining.substring(i+1));
            }
         }
    }

    public static void main(String[] args) {
        ArrayList<String> addedSoFar = new ArrayList<String>();
        palindromepartition(addedSoFar, "", args[0]);
        System.out.println(answers);
    }

    private static boolean isPalindrome(String str) {
        int start = 0;
        int end = str.length() - 1;
        while (start<end)
        {
            if (!(Character.toLowerCase(str.charAt(start)) == Character.toLowerCase(str.charAt(end))))
                return false;

            start++;
            end--;
        }
        return true;
    }

}
我明白了

[[S, i, d, d, dd], [S, i, d, d, dd]]
相对于

[[S, i, d, d], [S, i, dd]]
我知道发生了什么,因为java通过引用传递了arraylist'addedSoFar',它保留[[s,I,d,d]并在其上附加'dd',然后添加到'answers'中,将[[s,I,d,d]替换为[[s,I,d,d,dd]

我尝试的是: 在添加到“answers”之后,我尝试在addedSoFar上清除,但这只是清除“answers”中的现有条目

我尝试在回答后续订addedSoFar。添加呼叫,方法是:

addedSoFar = new ArrayList<String>();
我得到:

[[S, i, d, d, a, b, a], [aba], [dd, a, b, a], [aba]]
与之相反:

[[S, i, d, d, a, b, a], [S, i, d, d, aba]
这是因为静态变量“addedSoFar”被更新并丢失[S,id,d]

我在这里被难住了,不确定在传递“addedSoFar”时应该采取什么方法

[[S, i, d, d, a, b, a], [aba], [dd, a, b, a], [aba]]
[[S, i, d, d, a, b, a], [S, i, d, d, aba]