代码
class Solution { List< List<Integer> > result = new ArrayList<>(); LinkedList<Integer> path = new LinkedList<>(); boolean [] used ; public List<List<Integer>> subsetsWithDup(int[] nums) { used = new boolean[nums.length]; Arrays.sort(nums); backtracking(nums,0); return result; } public void backtracking(int[] nums, int startIndex) { result.add(new ArrayList<>(path)); for(int i = startIndex; i < nums.length; i++ ) { if(i > 0 && nums[i] == nums[i - 1] && !used[i -1 ]) { continue; } path.add(nums[i]); used[i] = true; backtracking(nums,i + 1); used[i] = false; path.removeLast(); } }}