javascript get all permutations of array code example

Example 1: how to find all permutations of an array with javascript

function getArrayMutations(arr, perms = [], len = arr.length) {
  if (len === 1) perms.push(arr.slice(0))

  for (let i = 0; i < len; i++) {
    getArrayMutations(arr, perms, len - 1)

    len % 2 // parity dependent adjacent elements swap
      ? [arr[0], arr[len - 1]] = [arr[len - 1], arr[0]]
      : [arr[i], arr[len - 1]] = [arr[len - 1], arr[i]]
  }

  return perms
}

Example 2: how to get all permutations of an array

/* to be used something like this:
int [] toBePermuted = new int [] {1, 2, 3, 4};
ArrayList<int[]> a = heap(toBePermuted);
any mention of int [] can be replaced with any other Array of objects */

ArrayList<int []> heap(int [] input) {
  ArrayList<int []> ret = new ArrayList<int []> ();
  ret = generate(input.length, input, ret);
  return ret;
}

ArrayList<int []> generate(int k, int [] a, ArrayList<int []> output) {
  if (k == 1) {
    output.add(a.clone());
  } else {
    output = generate(k-1, a, output);
    for (int i=0; i<k-1; i++) {
      if (k%2 == 0) {
        int temp = a[i];
        a[i] = a[k-1];
        a[k-1] = temp;
      } else {
        int temp = a[0];
        a[0] = a[k-1];
        a[k-1] = temp;
      }
      generate(k-1, a, output);
    }
  }
  return output;
}