[英]Why I am getting empty 2d ArrayList such as [ [ ], [ ], [ ], ... ] instead of adding ArrayList in 2d ArrayList while solving power set/subset problem?
我在遞歸的幫助下使用 java 解決了 leetcode 上的子集問題。 但問題是我沒有將 ArrayList 添加到 2d ArrayList 我得到 { {}, {}, {}, ...} 作為我的輸出而不是 { {1,2,3}, {1,2}, {1 ,3}、{1}、{2,3}、{2}、{3}、{}}。 有人可以解釋一下為什么會這樣嗎?
public static void main(String[] args) {
int[] nums = {1, 2, 3};
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> arr = new ArrayList<Integer>();
helper(0, result, arr, nums);
System.out.println(result);
}
public static void helper(int index, List<List<Integer>> result, List<Integer> arr, int[] nums){
if(index == nums.length){
result.add(arr);
return;
}
arr.add(nums[index]);
helper(index+1, result, arr, nums);
arr.remove(arr.size()-1);
helper(index+1, result, arr, nums);
}
此外,當我編寫此代碼時,它可以正常工作。 為什么?
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList(); // pay attention
List<Integer> arr = new ArrayList<Integer>();
helper(0, result, arr, nums);
return result;
}
public void helper(int index, List<List<Integer>> result, List<Integer> arr, int[] nums){
if(index == nums.length){
result.add(new ArrayList<Integer>(arr)); // pay attention
return;
}
arr.add(nums[index]);
helper(index+1, result, arr, nums);
arr.remove(arr.size()-1);
helper(index+1, result, arr, nums);
}
當你使用result.add(arr);
,添加到result
中的所有arr
都與您的main
函數中定義的相同。 因為arr
最后是 [],所以你的結果是[[], [], [], [], [], [], [], []]
。
但是當你使用result.add(new ArrayList<Integer>(arr));
,您創建了一個匿名的新ArrayList
對象,該對象與arr
當時的內容相同。 但是當arr
的內容發生變化時,它對這個匿名對象沒有任何作用。 所以最后,你得到了不同孩子的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.