题解 | #有重复项数字的全排列#
有重复项数字的全排列
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, };