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