47. Permutations II
public class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> ret=new ArrayList<List<Integer>>(); Arrays.sort(nums); boolean[] used=new boolean[nums.length]; permute(new ArrayList<Integer>(), used, ret, nums); return ret; } private void permute(List<Integer> list, boolean[] used, List<List<Integer>> ret, int[] nums){ if(list.size()==nums.length) ret.add(new ArrayList<Integer>(list)); else for(int i=0;i<nums.length;i++) if(used[i]==false) { if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false) continue; used[i]=true; list.add(nums[i]); permute(list, used, ret, nums); list.remove(list.size()-1); used[i]=false; } } }