题解 | #有重复项数字的全排列#

有重复项数字的全排列

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
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 16:06
已编辑
快手电商 后端 23k-35k
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务