给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> listAll=new ArrayList<List<Integer>>();
List<Integer> list=new ArrayList<Integer>();
boolean[] used=new boolean[nums.length]; //记录该元素是否已经使用
if(nums.length==0)
return listAll;
def(listAll,list,nums,used);
return listAll;
}
private static void def(List<List<Integer>> listAll,List<Integer> list,int[] nums,boolean[] used){
if(list.size()==nums.length){
if(!listAll.contains(list))
listAll.add(list);
return;
}
for(int i=0;i<nums.length;i++){
List<Integer> tmp=new ArrayList(list);
if(!used[i]){
tmp.add(nums[i]);
used[i]=true;
def(listAll,tmp,nums,used);
used[i]=false;
}
}
}
}