力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
这道题就是
代码随想录补|leetcode78 子集问题-CSDN博客 的78 +
day24-CSDN博客 的40。
解释见这两篇,代码拼一下就行。
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
int[] used = new int[nums.length];
Arrays.sort(nums);
backtracking(nums,0,used);
return result;
}
public void backtracking(int[] nums,int startIndex,int[] used){
result.add(new ArrayList<>(list));
if(startIndex == nums.length){
return;
}
for(int i = startIndex ;i < nums.length; i++){
if(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == 0){
continue;
}
list.add(nums[i]);
used[i] = 1;
backtracking(nums,i+1,used);
used[i] = 0;
list.remove(list.size() - 1);
}
}
}