4.24 回溯合集—47.全排列2
给定一个可包含重复数字的序列 nums
,*按任意顺序* 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
提示:
-
1 <= nums.length <= 8
-
-10 <= nums[i] <= 10
我的思路:
与上一个不同:重复:去重
set方法去重
去重代码:
const newStr = path.toString();
if(!set.has(newStr)){
res.push([...path]);
set.add(newStr);
}
排列代码:
for(let i = 0 ; i < nums.length ; i++){
if(use[i]){
continue;
}
else {
path.push(nums[i]);
use[i] = true;
backTraking(use);
use[i] = false;
path.pop();
}
}
总结:这道题目在上到题目地基础上要进行去重,因为不能排序加判断重复所以这里我才用了set判断,注意是要在添加到path之前使用判断逻辑