先上代碼,實現非常簡潔
/**
* @description 給定字符串輸出字符串中字母的全排列
*/
const input = ['a', 'b', 'c'];
const algorithm = (input) => {
const result = [];
const permutation = (arr, first = '') => {
let beforeStr = first;
arr.forEach((item) => {
if (arr.length <= 1) {
return result.push(beforeStr + item);
}
const extra = arr.filter((_item) => _item !== item);
return permutation(extra, beforeStr + item);
});
return beforeStr;
};
permutation(input);
return result;
};
console.log('input', input);
console.log('output', algorithm(input));
輸出
image.png
主要思路
image.png
在此樹中,每一個從樹根到葉子節點的路徑,就對應了集合A的一個排列。通過遞歸算法,每次將一個結果入結果集合,最終輸出。