给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
back(new ArrayList(), nums, new boolean[nums.length]);
return res;
}
public void back(List<Integer> curnum, int[] nums, boolean[] contain) {
if(curnum.size() == nums.length)
res.add(new ArrayList(curnum));
for(int i = 0; i < nums.length; i ++) {
if(contain[i])
continue;
if(i>0 && nums[i] == nums[i-1] && !contain[i-1])
continue;
contain[i] = true;
curnum.add(nums[i]);
back(curnum, nums, contain);
contain[i] = false;
curnum.remove(curnum.size() - 1);
}
}
}