array permutation code example
Example 1: 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;
}
Example 2: permutation javascript
const permutations = arr => {
if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
return arr.reduce(
(acc, item, i) =>
acc.concat(
permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [
item,
...val,
])
),
[]
);
};