class Solution {
// 保存结果
List<List<Integer>> res = new ArrayList<>();
// 暂存结果
List<Integer> path = new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
// 升序排序
Arrays.sort(nums);
// 记录元素是否用过
boolean[] used = new boolean[nums.length];
backTracking(nums,used);
return res;
}
public void backTracking(int[] nums,boolean[] used){
// 收集结果
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;
}
// 元素没有用到才会暂存到path中
if(!used[i]){
path.add(nums[i]);
used[i] = true;
backTracking(nums,used);
used[i] = false;
path.remove(path.size()-1);
}
}
}
}
力扣47题 全排列Ⅱ Java版
最新推荐文章于 2023-04-07 21:52:15 发布