我试图找出是否有可能在一行中删除索引处的指定元素后返回更新的ArrayList,以便我可以将其传递给递归函数。 下面是我的代码片段,它尝试生成所有有效的括号组合,给出n对"()"括号中。
我关注的是递归函数调用" findAllCombinations"在经过一些验证之后,我想在每个递归调用中从arrayList courceSet中删除一个字符。但是sourceSet.remove(index)
会返回一个字符。相反,我想在一行中删除字符后传递更新的列表。有可能吗?
注意:下面这行在语法上是错误的,仅用于更好的说明。
findAllCombinations(sourceSet.remove(index), soFar + singleBracket, singleBracket); .
我确实通过official documentation但没有找到任何帮助。
感谢任何帮助,感谢您的时间。
public class GenerateParenthesis {
char singleBracket;
List<String> answerSet = new ArrayList<String>();
char[] repoSet = {'(',')'};
public List<String> generateParenthesis(int n) {
String soFar = "(";
List<Character> sourceSet = new ArrayList<Character>();
for(int i = 0;i<n;i++){
sourceSet.add('(');
sourceSet.add(')');
}
findAllCombinations(sourceSet,soFar,'(');
return answerSet;
}
public void findAllCombinations(List<Character> sourceSet,String soFar,Character toRemove){
if(sourceSet.isEmpty()){
answerSet.add(soFar); // append to a answer set list containing all combinations
return;
}
for(int i = 0;i<2;i++){
singleBracket = repoSet[i];
int index = sourceSet.indexOf(singleBracket);
if(index!=-1) {
findAllCombinations(sourceSet.remove(index), soFar + singleBracket, singleBracket);
}
}
}
public static void main(String args[]){
GenerateParenthesis gp = new GenerateParenthesis();
List<String> ans = new ArrayList<String>();
ans = gp.generateParenthesis(3);
}
}
答案 0 :(得分:0)
ArrayList
(可能是大多数List
实现)是一个可变数据结构:调用remove
您修改列表而不是返回一个没有的新列表删除元素。
如果您想要后一种行为,那么快速简便的方法就是复制一份清单。
// (inside the if...)
// pass the original list to the constructor to make a copy
List<Character> sourceSetCopy = new ArrayList<>(sourceSet);
// modify the copy
sourceSetCopy.remove(index);
// use the modified copy
findAllCombinations(sourceSetCopy, soFar + singleBracket, singleBracket);