我想在遞歸函數中使用ArrayList。 我正在嘗試查找大小爲r的數組arr的組合。就像如果我有一個數組ArrayList的數組每次都被覆蓋
["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);
}
}
請告訴我,我做錯了。
編輯:我不知道我需要的組合的大小。即在這裏我給了3例如我可能需要2或4或5 – SidSel
編輯2:這是我的printArray()私人靜態無效printArray(字符串[] res){int i = 0;我
SidSel
編輯3:我創建了一個類計數器來計算找到的組合數。這裏是該代碼:類變量 { public int count; 變量(int a) { this.count = a; \t } public void add() { this.count ++; \t } public void print() { \t System.out.println(「Counter is」+ this.count); } } – SidSel