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]