Maison >interface Web >js tutoriel >Question intéressante JavaScript : arrangement complet et déduplication

Question intéressante JavaScript : arrangement complet et déduplication

黄舟
黄舟original
2017-01-22 14:42:551844parcourir

Étant donné une chaîne, affichez tous ses résultats de permutation sous la forme d'un tableau, ne nécessitant aucun résultat en double.

Par exemple :

J'ai la chaîne "aabb", et son résultat de permutation complet devrait être 4*3*2*1=24, mais compte tenu de l'exigence selon laquelle il n'y a pas de duplication, Le résultat est donc 6, comme suit :

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

Donc la question Le la clé réside dans deux aspects :

1. Comment trouver l'arrangement complet

2 Comment dédupliquer les résultats

Pour trouver l'arrangement complet, vous pouvez utiliser l'une ou l'autre récursive. ou des méthodes non récursives.

La suppression peut utiliser un hachage pour atteindre l'objectif.

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

Ce qui précède est la question JavaScript intéressante : arrangement complet et déduplication. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn