题目

image.png

代码

  1. class Solution {
  2. List< List<Integer> > result = new ArrayList<>();
  3. LinkedList<Integer> path = new LinkedList<>();
  4. boolean [] used ;
  5. public List<List<Integer>> subsetsWithDup(int[] nums) {
  6. used = new boolean[nums.length];
  7. Arrays.sort(nums);
  8. backtracking(nums,0);
  9. return result;
  10. }
  11. public void backtracking(int[] nums, int startIndex) {
  12. result.add(new ArrayList<>(path));
  13. for(int i = startIndex; i < nums.length; i++ ) {
  14. if(i > 0 && nums[i] == nums[i - 1] && !used[i -1 ]) {
  15. continue;
  16. }
  17. path.add(nums[i]);
  18. used[i] = true;
  19. backtracking(nums,i + 1);
  20. used[i] = false;
  21. path.removeLast();
  22. }
  23. }
  24. }