class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
boolean[] used = new boolean[8];
Arrays.fill(used,false);
Arrays.sort(nums);
backtracking(used, nums);
return res;
}
public void backtracking(boolean[] used,int[] nums){
if(path.size() == nums.length){
res.add(new ArrayList(path));
return;
}
for(int i = 0; i < nums.length;i++){
if(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) continue;
if(used[i] == false){
path.add(nums[i]);
used[i] = true;
backtracking(used, nums);
used[i] = false;
path.removeLast();
}
}
}
}
全排列好难啊,used[i - 1] == false是为了保证相同元素,前一个可以使用后,后面的相同元素在同一层全被剪枝了。