全排列算法

參考資料

先上代碼,實現非常簡潔

/**
 * @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的一個排列。通過遞歸算法,每次將一個結果入結果集合,最終輸出。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問題:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則輸出由字符a,b,c所能排列出來的所...
    方法一君閱讀 583評論 0 0
  • 題目:給定元素a,b,a,b,c,c,d,求解出所有的排列。思路:首先這道題的算法是一個比較經典的算法,它并不是使...
    IT孤獨者閱讀 1,336評論 0 0
  • 問題背景### 遞歸很常用,但確實不好理解,下邊這段程序是用來進行數字全排列的由于很多算法需要講數字全排列后再來暴...
    Moonsmile閱讀 411評論 0 0
  • 搬完家大約一個月的時間,我關注到樓道有盆草。 挺高的,到我的大腿,葉子寬又長。 它應該有個品種,可能還有個名字,但...
    凝了個大重閱讀 632評論 4 4
  • 一項好的投資策略應該是最小化主觀因素,最大化客觀因素的投資策略。今天來談談一項神奇的交易策略——平均交易策略。可以...
    楊胖兒閱讀 663評論 0 1