leetcodealgorithms-templates5-backtracking
 
 
 
// Time: O(n^2 * n!)
function permutationRecursive(nums) {
    return helper(0, nums);
}
 
function helper(i, nums) {
    if (i == nums.length) {
        return [[]];
    }
    let resPerms = [];
    let perms = helper(i + 1, nums);
    for (let p of perms) {
        for (let j = 0; j < p.length + 1; j++) {
            let pCopy = [...p];
            pCopy.splice(j, 0, nums[i]);
            resPerms.push(pCopy);
        }
    }
    return resPerms; 
}
 
 
// Time: O(n^2 * n!)
function permutationsIterative(nums) {
    let perms = new Array();
    perms.push(new Array());
 
    for (let n of nums) {
        let nextPerms = new Array();
        for (let p of perms) {
            for (let i = 0; i < p.length + 1; i++) {
                let pCopy = [...p];
                pCopy.concat(p);
                pCopy.splice(i, 0, n);
                nextPerms.push(pCopy);
            }  
        }
        perms = nextPerms;
    }
    return perms;
}