當我試圖解決子問題,我寫這樣的代碼:ArrayList中,列表
public class Subsets {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
backtrack(list, new ArrayList<>(), nums, 0);
return list;
}
public void backtrack(List<List<Integer>> list, ArrayList<Integer>temp, int[] nums, int start){
list.add(temp);
for(int i = start; i<nums.length;i++){
temp.add(nums[i]);
backtrack(list, temp, nums, i++);
temp.remove(temp.size()-1);
}
}
}
輸出是
[[] [] [] [] ,[],[],[],[]]
但正確的答案應該是
[[3], [1] [2] [1,2,3] [1,3] [2,3] [1,2] []]
當我改變「回溯」這樣的代碼,得到的答案是正確的:
public void backtrack(List<List<Integer>> list, List<Integer> temp, int[] nums, int start){
list.add(new ArrayList(temp));
for(int i = start; i<nums.length;i++){
temp.add(nums[i]);
backtrack(list, temp, nums, i+1);
temp.remove(temp.size()-1);
}
}
我的問題:爲什麼我需要寫這樣的代碼:
public void backtrack(List<List<Integer>> list, List<Integer> temp, int[] nums, int start){
list.add(new ArrayList(temp));
的而不是:
public void backtrack(List<List<Integer>> list, ArrayList<Integer> temp, int[] nums, int start){
list.add(temp);
非常感謝您的快速接受。我很高興它爲你工作! – GhostCat