题解 | #有重复项数字的全排列#
有重复项数字的全排列
http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
跟上一题思路一致,但是要注意重复的时候需要跳过。而且重要的是想将数组进行排序
function permuteUnique( num ) {
// write code here
let len = num.length,res =[],visited = new Array(len).fill(false);
num.sort((a,b)=>{return a-b;})
const dfs = (depth,path,visited) => {
if(depth == len){
res.push([...path]);
return;
}
for(let i = 0;i<len;i++){
//数组时升序的,当前不是第一个且相邻两个值相等时且当前节点的上个节点没有被访问过时。则忽略此次该数排列
//因为会造成和前一次一样的排序。
if(i !=0 && num[i] == num[i-1] && !visited[i-1]){
continue;
}
if(!visited[i]){
path.push(num[i]);
visited[i] = true;
dfs(depth+1,path,visited);
path.pop();
visited[i] = false;
}
}
}
dfs(0,[],visited);
return res;
}
module.exports = {
permuteUnique : permuteUnique
};