方法:回溯 class Solution { List<List<Integer>> ans = new ArrayList<>(); List<Integer> path = new ArrayList<>(); public List<List<Integer>> permuteUnique(int[] nums) { Arrays.sort(nums); boolean[] used = new boolean[nums.length]; backtracking(nums, used); return ans; } public void backtracking(int[] nums, boolean[] used) { if (path.size() == nums.length) { ans.add(new ArrayList<>(path)); return; } for (int i = 0; i < nums.length; i++) { if (!used[i]) { if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) continue; path.add(nums[i]); used[i] = true; backtracking(nums, used); path.remove(path.size() - 1); used[i] = false; } } } }