我一直在試圖理解,使用深度優先搜索(DFS)下面的代碼打印出長度爲k的包括數字的所有獨特的組合[1..1]Java的ArrayList的初始化
請參閱該行私人DFS功能
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if (n <= 0 || n < k)
return result;
ArrayList<Integer> item = new ArrayList<Integer>();
dfs(n, k, 1, item, result);
return result;
}
private void dfs(int n, int k, int start, ArrayList<Integer> item,
ArrayList<ArrayList<Integer>> res) {
if (item.size() == k) {
res.add(new ArrayList<Integer>(item)); /*doubt*/
return;
}
for (int i = start; i <= n; i++) {
item.add(i);
dfs(n, k, i + 1, item, res);
item.remove(item.size() - 1);
}
}
評論說:「疑問」如果我把它改爲res.add(項目)返回結果爲空列表的列表。 ListObject.add(E e)是一個完全有效的函數,爲什麼它不起作用?
因爲您正在修改for循環中'item'指向的同一列表。這也將修改存儲在'res'列表中的參考列表。 –