var permuteUnique = function(nums) {
nums = nums.sort(function(a, b){
return a - b;
});
let answer = [];
let answers = [];
let used = new Array(nums.length).fill(0);
function backtrack(index){
if(index > nums.length){
answers.push([...answer]);
return;
}
for(let i = 0; i < nums.length; i++){
//当前元素使用过时,找下一个
if(used[i] == 1)continue;
//当前元素没有使用过并且 和它相同的前一个元素 也没有使用过 说明它没有存在的必要
//(即 同一个树枝不用考虑重复 因为 used 相同值的元素 标签可以不同;
//同一层树需要考虑重复 因为会产生一样的树枝
//若需要剪掉它 此时它的前一个元素肯定也还没有放到树枝中来 )
if(i > 0 && nums[i] == nums[i - 1] && used[i -1] == 0)continue;
used[i] = 1;
answer.push(nums[i]);
backtrack(index + 1);
used[i] = 0;
answer.pop();
}
}
backtrack(1);
return answers;
};
思路大致参考上一篇博客
|