classSolution{ private List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsetsWithDup(int[] nums) { Arrays.sort(nums); dfs(nums, 0, new ArrayDeque<Integer>()); return ans; }
privatevoiddfs(int[] nums, int start, Deque<Integer> path){ ans.add(new ArrayList<Integer>(path));
int pre = -10; for(int i = start; i < nums.length; i++){ if(nums[i] != pre){ path.addLast(nums[i]); dfs(nums, i + 1, path); path.removeLast(); pre = nums[i]; } } } }