//1.同层不取重复的值(排序后比较前一个值是否相同)
//2.递归中不取取过的值(标记法)
//标记前为:use[muns[i]]==undefined
//标记后:use[muns[i]]==true
//撤销标记后:use[muns[i]]==false
var permuteUnique = function(nums) {
let arr=[]
let p=[]
nums.sort((a,b)=>a-b)
const dd=function(use){
//遍历完所有
if(p.length==nums.length){
arr.push([...p])
return
}
for(let i=0;i<nums.length;i++){
//处理同一层,与前一个值相同,且前一个值已经取过了
if(i>0&&nums[i]===nums[i-1]&& use[i - 1]==false){
continue
}
//处理递归中标记的时下标
if(use[i]){
continue
}
p.push(nums[i])
use[i]=true
dd(use)
use[i]=false
p.pop()
}
}
dd([])
return arr
};
力扣47. 全排列 II(JavaScript)
最新推荐文章于 2024-07-09 23:43:07 发布