2016-12-31 53 views
0

我工作的一個排列問題,我有下面的代碼:爲什麼我需要做list.add(new ArrayList <>(temp));在2D列表中添加列表時?

public List<List<Integer>> permute(int[] nums) { 
    List<List<Integer>> list = new ArrayList<>(); 
    helper(list,new ArrayList<Integer>(), nums); 
    return list; 
} 

private void helper(List<List<Integer>> list, List<Integer> temp, int[] num) { 
    if (temp.size() == num.length) { 
     list.add(new ArrayList<>(temp)); 
    } 
    else { 
     for (int i = 0; i < num.length; i++) { 
      if (temp.contains(num[i])) continue; 
      temp.add(num[i]); 
      helper(list, temp, num); 
      temp.remove(temp.size() - 1); 
     } 
    } 
} 

我不明白的是爲什麼我需要寫:的

list.add(new ArrayList<>(temp)); 

代替:

list.add(temp); 
+0

'new ArrayList <>(temp)'做什麼? –

+0

如果你不這樣做會怎樣? – 2016-12-31 03:45:23

+0

如果我做list.add(temp);我在答案中得到空列表。 – user2817869

回答

3

new ArrayList<>(temp)創建新的ArrayList,其元素與temp相同。這意味着,如果helper的調用程序是這樣的:

ArrayList<Integer> temp = new ArrayList<>(); 
// populate temp here 
object.helper(list, temp, someIntArray); 
temp.clear() 

helper存儲列表不受clear

相關問題