ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の興味深い質問: 完全な配置と重複排除

JavaScript の興味深い質問: 完全な配置と重複排除

黄舟
黄舟オリジナル
2017-01-22 14:42:551822ブラウズ

文字列を指定すると、そのすべての置換結果を配列の形式で表示します。結果が重複する必要はありません。

例:

文字列「aabb」があり、その完全な順列結果は 4*3*2*1=24 になるはずですが、繰り返しがないことを考慮すると、結果は次のように 6 になります。

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

したがって、問題の鍵は 2 つの側面にあります:

1 完全な配置を見つける方法

2 .結果から重複を削除する方法

完全な配置を見つけるには、再帰的方法または非再帰的方法のいずれかを使用できます。

重複排除の目的を達成するためにハッシュを使用できます。

//递归求解全排列  
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);  
}

上記は JavaScript の楽しい質問です: 完全な配置と重複排除 詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。