题解 | #有重复项数字的全排列#
有重复项数字的全排列
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,
};
查看12道真题和解析

