题目

image.png

思路

  • 全排列类似,只是关键在于去重,但是其思想与组合总和 II的去重思想一致
  • dfs+回溯

    代码

    1. public List<List<Integer>> permuteUnique(int[] nums) {
    2. List<List<Integer>> res = new ArrayList<>();
    3. Arrays.sort(nums);
    4. dfs(nums, 0, res, new ArrayList<>());
    5. return res;
    6. }
    7. public void dfs(int[] nums, int index, List<List<Integer>> res, List<Integer> tmp) {
    8. if (nums.length == tmp.size()) {
    9. res.add(new ArrayList<>(tmp));
    10. return;
    11. }
    12. for (int i = index; i < nums.length; i++) {
    13. //去重
    14. if (nums[i] == -100 || i != index && nums[i] == nums[i - 1]) continue;
    15. tmp.add(nums[i]);
    16. nums[i] = -100;
    17. dfs(nums, index, res, tmp);
    18. nums[i] = tmp.remove(tmp.size() - 1);
    19. }
    20. }

    全排列 II