题目描述:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example:
Input: [1,1,2] Output: [ [1,1,2], [1,2,1], [2,1,1] ]
中文理解:
给出一个数组,数组中存在重复项,给出数组中所有元素可能的排列。
解题思路:
使用boolean数组标识数组元素的使用情况,如果使用了为true,未使用未false,每次判断一个元素是否可以加入时总是看used数组该元素下标的元素是否为true,或者如果nums[i-1]==nums[i]且nums[i-1]等于false,则跳过该元素。
代码(java):
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> list=new ArrayList();
Arrays.sort(nums);
backtrack(list,new ArrayList<Integer>(),nums,new boolean [nums.length]);
return list;
}
public void backtrack(List<List<Integer>> list,ArrayList<Integer> tempList,int[] nums,boolean[] used){
if(tempList.size()==nums.length){
list.add(new ArrayList(tempList));
}
else{
for(int i=0;i<nums.length;i++){
if(used[i] || (i > 0 && nums[i] == nums[i-1] && !used[i - 1]))continue;
tempList.add(nums[i]);
used[i]=true;
backtrack(list,tempList,nums,used);
used[i]=false;
tempList.remove(tempList.size()-1);
}
}
}
}