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

有重复项数字的全排列

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,
};

全部评论

相关推荐

04-06 11:24
已编辑
太原学院 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务