/**
 * 
 * @param num int整型一维数组 
 * @return int整型二维数组
 */
function permute(num) {
    // write code here
    num = num.sort((a, b) => { return a - b });
    let ans = [];
    function dfs(num, index) {
        let data = [...num];
        let len = data.length;
        if (index == len - 1) {
            // 若执行到最后一个元素,则添加数组
            ans.push(data);
            return;
        }
        for (let i = index; i < len; ++i) {
            // 依次交换index下标元素和各个元素
            let t = data[i];
            data[i] = data[index];
            data[index] = t;
            // 递归调用本身,直到index下标后所有元素都被交换
            dfs(data, index + 1);
            // 依次还原被交换的index下标元素和各个元素
            t = data[i];
            data[i] = data[index];
            data[index] = t;
        }
    }
    dfs(num, 0);
    ans = ans.sort((a, b) => {
        // 按照序列化以后的数组进行排序
        return JSON.stringify(a) - JSON.stringify(b)
    });
    return ans;
}
module.exports = {
    permute: permute
};