Backtracking
function permutations(str) {
const chars = [...str];
const res = [];
function dfs(start) {
if (start === chars.length) {
res.push(chars.join(''));
return;
}
const seen = new Set();
for (let i = start; i < chars.length; i++) {
if (seen.has(chars[i])) continue;
seen.add(chars[i]);
[chars[start], chars[i]] = [chars[i], chars[start]];
dfs(start + 1);
[chars[start], chars[i]] = [chars[i], chars[start]];
}
}
dfs(0);
return res;
}
permutations('abc');
Сложность
O(n!) результатов — быстро взрывается; на собеседовании важны корректность и дедуп.
Итог
DFS + swap (или used-маска) — стандартный шаблон.