Permutations II
问题描述:给定一个可能包含重复数的集合,返回所有唯一的permutations。
比如,
[1,1,2]
有如下唯一的permutations:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
问题解决:
public class PermutationTwo
{
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res=new ArrayList<>();
List<Integer> temp=new ArrayList<>();
int len=nums.length;
boolean[] used=new boolean[len];
backtrace(res,temp,nums,used);
return res;
}
public void backtrace(List<List<Integer>> res,List<Integer> temp,int[] nums,boolean[] used)
{
if(temp.size()==nums.length) {
res.add(new ArrayList<>(temp));
} else {
for(int i=0;i<nums.length;i++)
{
if(used[i]) continue;
if(i>0 && nums[i]==nums[i-1] && !used[i-1]) continue;
temp.add(nums[i]);
used[i]=true;
backtrace(res, temp, nums, used);
used[i]=false;
temp.remove(temp.size() - 1);
}
}
}
public static void main(String[] args)
{
int[] nums={1,1,2};
List<List<Integer>> res=new PermutationTwo().permuteUnique(nums);
System.out.println(res.size());
for(List<Integer> list:res)
System.out.println(list);
}
}
采用dfs来遍历整个序列,并找出满足条件的结果集。