我试图在递归函数中使用ArrayList。 我试图找到大小为r的数组arr的组合。就像我有一个数组
["A","B","C","D"]
我想打印:
A B C
A B D
A C D
B C D
但是当我在递归函数中打印我的ArrayList时,它会给出:
Call1 : ABC
Call2 : ABD
ABD
等等。即,每次ArrayList
的先前内容被新内容覆盖,新内容也被添加到最后。
同样在调用递归函数的函数中,我的ArrayList没有被返回,它只包含一个Es列表。
在调用递归函数的函数中,我有类似
的函数private static void combine(String[] arr, int r) {
String[] res = new String[r];
ArrayList<String[]> result = new ArrayList<String[]>();
doCombine(arr, res, 0, 0, r, result);
System.out.println("\nIn main" + result.size());
for (Object[] array : result) {
for (Object o : array)
System.out.print("item: " + o);
System.out.println();
}
}
// This recursive function finds combinations
private static void doCombine(String[] arr, String[] res, int currIndex,
int level, int r, ArrayList<String[]> result) {
if (level == r) {
printArray(res);
String[] inter = new String[r];
inter = res;
result.add(inter);
// Tryinh to see wht the array list has every time
for (Object[] array : result) {
for (Object o : array) {
System.out.print("item: " + o);
}
System.out.println();
}
inter = null;
return;
}
for (int i = currIndex; i < arr.length; i++) {
counter.add();
res[level] = arr[i];
doCombine(arr, res, i + 1, level + 1, r, result);
}
}
请告诉我我做错了什么。
答案 0 :(得分:0)
修改代码
String[] inter = new String[r];
inter = res;
result.add(inter);
到
String[] inter = new String[r];
int k=0;
for(String s:res){
inter[k] = s;
k++;
}
result.add(inter);
代码按预期工作。
输出:
1
A B C
2
A B C
A B D
3
A B C
A B D
A C D
4
A B C
A B D
A C D
B C D