本题难点nums含有重复元素
1、进行排序后方便判断是否有相同元素
2、回溯的for循环中的if语句!
- nums[i] == nums[i-1] 判断相同
- i>start
详细见注释
class Solution {
List<List<Integer>> res = new LinkedList<>();
LinkedList<Integer> track = new LinkedList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
//因为含有重复元素,所以将其进行排序后再回溯
Arrays.sort(nums);
backtrack(nums,0);
return res;
}
public void backtrack(int[] nums,int start){
res.add(new LinkedList<Integer>(track));
for(int i = start;i<nums.length;i++){
//重要!!!!“i>start”语句
if(i>start &&nums[i] == nums[i-1]){
continue;
}
track.add(nums[i]);
backtrack(nums,i+1);
track.removeLast();
}
}
}