Wenn ich versuche Teilmenge Problem zu lösen, schreibe ich einen Code wie folgt aus:Arraylist, List
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);
}
}
}
Der Ausgang ist
[[], [], [], [] , [], [], [], []]
aber die richtige Antwort sollte
[[3] sein, [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
Wenn ich den "Backtrack" ändere Code wie das, ist die Antwort richtig:
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);
}
}
Meine Frage: warum muss ich Code so schreiben:
public void backtrack(List<List<Integer>> list, List<Integer> temp, int[] nums, int start){
list.add(new ArrayList(temp));
statt, dass:
public void backtrack(List<List<Integer>> list, ArrayList<Integer> temp, int[] nums, int start){
list.add(temp);
Danke für die wirklich schnelle Annahme. Ich bin froh, dass es für dich funktioniert hat! – GhostCat