É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 (m.sbmmt.com) !