/**
*
* @param num int整型一维数组
* @return int整型二维数组
*/
function permuteUnique(num) {
// write code here
let ans = [];
function dfs(num, index) {
let len = num.length;
if (index == len - 1) {
// 若执行到最后一个元素,则添加数组
ans.push([...num]);
return;
}
for (let i = index; i < len; ++i) {
// 依次交换index下标元素和各个元素
let t = num[i];
num[i] = num[index];
num[index] = t;
// 递归调用本身,直到index下标后所有元素都被交换
dfs(num, index + 1);
// 依次还原被交换的index下标元素和各个元素
t = num[i];
num[i] = num[index];
num[index] = t;
}
}
dfs(num, 0);
let obj = {};
for (let item of ans) {
obj[item] = item;
}
// 去重
ans = Object.values(obj);
// 升序排序
ans = ans.sort();
return ans;
}
module.exports = {
permuteUnique: permuteUnique
};