Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、题目描述:
给定一个可包含重复数字的序列
nums,按任意顺序 返回所有不重复的全排列。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pe…
二、思路分析:
难点在于去重。为了去重,需要先排序。if(flag[i]||(i&&nums[i]===nums[i-1]&&flag[i-1]==false)) continue;这一行很关键
三、AC 代码:
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permuteUnique = function(nums) {
nums.sort((a,b)=>a-b);
let len=nums.length;
let flag=new Array(len).fill(false);
let res=[];
dfs([]);
return res;
function dfs(temp){
if(temp.length===len) res.push(temp)
for(let i=0;i<len;i++){
if(flag[i]||(i&&nums[i]===nums[i-1]&&flag[i-1]==false)) continue;
flag[i]=true;
dfs(temp.concat(nums[i]));
flag[i]=false;
}
}
};
四、总结:
难点在于去重