π‘ General Theory
n !
nPr = ----------
(n - r) !
π₯ Permutations
const permutations = (array, length = array.length) => {
const res = [];
const dfs = (cur, remain) => {
if (cur.length === length) {
res.push([...cur]);
return;
}
for (let i = 0; i < remain.length; i += 1) {
cur.push(remain[i]);
dfs(cur, [...remain.slice(0, i), ...remain.slice(i + 1)]);
cur.pop();
}
};
dfs([], array);
return res;
};
const nums = [1, 2, 3, 4, 5];
const result = permutations(nums, 2);
Generate fixed length permutations
- Exchange one element
nums[first]
with the others nums[first:]
- without array slicing
var permute = function (nums) {
const N = nums.length;
const res = [];
const backtrack = (first) => {
if (first >= N) {
res.push([...nums]);
return;
}
for (let i = first; i < N; i += 1) {
[nums[first], nums[i]] = [nums[i], nums[first]];
backtrack(first + 1)[(nums[first], nums[i])] = [nums[i], nums[first]];
}
};
backtrack(0);
return res;
};
ποΈ Typical problems