我正在研究排列问题,我有以下代码:
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 :(得分:3)
new ArrayList<>(temp)
创建一个新的ArrayList
,其元素与temp
相同。这意味着如果helper
的调用者做了类似的事情:
ArrayList<Integer> temp = new ArrayList<>();
// populate temp here
object.helper(list, temp, someIntArray);
temp.clear()
helper
存储的列表不受clear
的影响。