Given a collection of numbers that might contain duplicates, return all possible unique permutations.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
class { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> list=new ArrayList<>(); Arrays.sort(nums); backTrack(list,new ArrayList<>(),nums,new boolean [nums.length]); return list; } public void backTrack(List<List<Integer>> list,List<Integer> tempList,int [] nums,boolean[] used) { if(tempList.size()==nums.length) { list.add(new ArrayList<>(tempList)); } else { for(int i=0;i<nums.length;i++) { if(used[i]||(i>0)&&(nums[i]==nums[i-1])&&(!used[i-1])) continue; used[i]=true; tempList.add(nums[i]); backTrack(list,tempList,nums,used); used[i]=false; tempList.remove(tempList.size()-1); } } } }
|
近期评论