/**
 * 
 * @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
};