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

有重复项数字的全排列

https://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param num int整型一维数组
 * @return int整型二维数组
 */
function permuteUnique(num) {
    // write code here
    if (!num) {
        return [];
    }
    if (num.length == 1) {
        return [num];
    } //全排列只有一种
    let res = []; //所有的全排列,二维数组,放这里
    // let mark = {}; //用一个对象来记录,key是脚标,value是放在这里的值的数组
    let mark = [];
    for (let i = 0; i < num.length; i++) {
        // 判断是不是有一个一样的元素在这个位置出现过
        if (mark.indexOf(num[i]) != -1) {
            continue;
        } else {
            mark.push(num[i]);
        }

        // 把num[i]放在这里的开头,然后后面全排布
        let rest = permuteUnique(num.slice(0, i).concat(num.slice(i + 1)));
        for (let r of rest) {
            res.push([num[i], ...r]);
        }
    }
    res = res.sort((a,b)=>{return a[0]-b[0]})
    return res;
}
module.exports = {
    permuteUnique: permuteUnique,
};

全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
SmileDog12138:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
04-03 12:09
東京大学 C++
求求求求暑期offer:留第一行,剩下的不要
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务