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]
]
思路
backtracking
和第36题一样
但是多一个去重
首先将数组排序
其次需要一个boolean变量来判断元素是否使用过
哟一点不明白是之前也遇到国不能重复的backtracking
为什么之前不需要这个Boolean来判断 而本题需要
与明白的网友希望可以为我解答一下
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer>list = new ArrayList<>();
if(nums == null||nums.length ==0){
return res;
}
Arrays.sort(nums);
helper(res,new ArrayList<>(),nums,new boolean[nums.length]);
return res;
}
public void helper(List<List<Integer>> res,List<Integer>list ,int[] nums,boolean[] used){
if(list.size() == nums.length){
res.add(new ArrayList<>(list));
}
for(int i =0;i<nums.length;i++){
if(used[i]|| i>0&& nums[i] == nums[i-1]&&!used[i-1]){
continue;
}
used[i] = true;
list.add(nums[i]);
helper(res,list,nums,used);
used[i] = false;
list.remove(list.size()-1);
}
}
}