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

有重复项数字的全排列

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-29 12:19
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务