Heim  >  Artikel  >  Web-Frontend  >  Interessante JavaScript-Frage: vollständige Anordnung und Deduplizierung

Interessante JavaScript-Frage: vollständige Anordnung und Deduplizierung

黄舟
黄舟Original
2017-01-22 14:42:551822Durchsuche

Bei einer gegebenen Zeichenfolge werden alle Permutationsergebnisse in Form eines Arrays angezeigt, sodass keine doppelten Ergebnisse erforderlich sind.

Zum Beispiel:

Ich habe die Zeichenfolge „aabb“ und ihr vollständiges Permutationsergebnis sollte 4*3*2*1=24 sein, aber wenn man bedenkt, dass es keine Duplikate gibt, also Das Ergebnis ist 6, wie folgt:

['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']

Die Frage liegt also im Schlüssel in zwei Aspekten:

1. So finden Sie die vollständige Anordnung

2. Wie Sie die Ergebnisse deduplizieren

Um die vollständige Anordnung zu finden, können Sie entweder rekursiv oder nicht verwenden -rekursive Methoden.

Beim Entfernen kann ein Hash verwendet werden, um den Zweck zu erreichen.

//递归求解全排列  
function permutations(string) {  
    //用于存放去重结果的hash  
    var hash = {};  
    //遍历函数  
    //from:要遍历的字符数组  
    //to:记录路径的字符数组  
    var traverse = function(from,to){  
        //若当前深度没有达到叶子  
        if(to.length < string.length){  
            for(var i=0;i<from.length;i++){  
                var newFrom = from.slice(0);  
                var one = newFrom.splice(i,1);  
                var newTo = to.slice(0);  
                newTo = newTo.concat(one);  
                traverse(newFrom,newTo);  
            }  
        }  
        else{  
            //作为key存入hash  
            hash[to.join("")] = null;  
        }  
    };  
      
    traverse(string.split(""),[]);  
    //提取hash的key作为数组返回  
    return Object.keys(hash);  
}

Das Obige ist die lustige JavaScript-Frage: vollständige Anordnung und Deduplizierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn