『剣指offer』—JavaScript(27)文字列の配列

1329 ワード

文字列の配置
タイトルの説明
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
構想
  • 再帰思想:大きな問題をいくつかの小さな問題に変換する.
  • n個の要素の全配列=(n-1)個の要素の全配列+一つの要素を接頭辞とする.
  • 再帰出口:1つの要素の全配列しかなく、このときソートが完了し、配列が出力されます.
  • 文字列を巡回し、各文字を最初の要素に接頭辞として配置し、残りの要素を完全に配置し続けます.
  • 新しいisRepeat空のオブジェクトを作成し、文字が重複しているかどうかを判断し、重複している場合はソートをスキップします.

  • インプリメンテーションコード
    function Permutation(str) {
        var result = [];
        if (str.length <= 0) {
            return [];
        }
        var sortTemp= "";
        var arr = str.split("");
        result = sortString(arr, sortTemp, []);
        return result;
    }
    
    function sortString(arr, sortTemp, res) {
        if (arr.length == 0) {
            res.push(sortTemp);
        } else {
            var isRepeat = {};
            for (var i = 0; i < arr.length; i++) {
                if (!isRepeat[arr[i]]) {
                    var temp = arr.splice(i, 1)[0]; //    i   
                    sortTemp+= temp; //  i       
                    sortString(arr, sortTemp, res);
                    arr.splice(i, 0, temp); //        ,      
                    sortTemp= sortTemp.slice(0, sortTemp.length - 1); //   sortTemp
                    isRepeat[temp] = true;
                }
            }
        }
        return res;
    }