class Solution {
boolean[] f;
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> ans=new ArrayList<List<Integer>>();
List<Integer> list=new ArrayList<Integer>();
f=new boolean[nums.length];
Arrays.sort(nums);
back(ans,list,nums,0);
return ans;
}
void back(List<List<Integer>> ans,List<Integer> list,int[] nums,int index){
if(index==nums.length){
ans.add(new ArrayList<Integer>(list));
return;
}
for(int i=0;i<nums.length;++i){
if(f[i] || (i > 0 && nums[i] == nums[i - 1] && !f[i - 1])){
continue;
}
list.add(nums[i]);
f[i]=true;
back(ans,list,nums,index+1);
f[i]=false;
list.remove(index);
}
}
}
回溯框架如何填充也是个问题