2017.9.14
如果带有重复元素,那么当元素重复的时候,直接continue跳出循环进行下一个就好了。
这道题不同于第15道题全排列的地方是输出必须要按顺序输出,不然会报错。
所以需要提前对数组进行排序。
public class Solution {
/*
* @param nums: A list of integers
* @return: A list of unique permutations
*/
public List<List<Integer>> permuteUnique(int[] nums){
// write your code here
Arrays.sort(nums);
LinkedList<List<Integer>> res = new LinkedList<>();
if(nums.length <= 0){
List<Integer> tmp = new LinkedList<>();
res.add(tmp);
return res;
}
if(nums.length == 1){
List<Integer> tmp = new LinkedList<>();
tmp.add(nums[0]);
res.add(tmp);
return res;
}
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++){
if(set.contains(nums[i])){
continue;
}
else{
set.add(nums[i]);
}
int []newArr = new int[nums.length-1];
if(i != 0){
System.arraycopy(nums, 0, newArr, 0, i);
}
System.arraycopy(nums, i+1, newArr, i, nums.length-i-1);
List<List<Integer>> list = permuteUnique(newArr);
Iterator ite = list.iterator();
while(ite.hasNext()){
LinkedList<Integer> tmp = (LinkedList<Integer>)ite.next();
tmp.addFirst(nums[i]);
res.add(tmp);
}
}
return res;
}
}