class Solution { public List> permuteUnique(int[] nums) { List> result = new ArrayList<>(); Arrays.sort(nums); backtrack(result, new ArrayList(), nums, new boolean[nums.length]); return result; } public void backtrack(List> result, List temp, int [] nums, boolean [] used) { if(temp.size() == nums.length) result.add(new ArrayList<>(temp)); else { for(int i=0; i0 && nums[i] == nums[i-1] && !used[i-1]) continue; used[i] = true; temp.add(nums[i]); backtrack(result, temp, nums, used); used[i] = false; temp.remove(temp.size()-1); } } } }