문자열이 주어지면 모든 순열 결과를 배열 형식으로 표시하므로 중복된 결과가 필요하지 않습니다.
예:
"aabb" 문자열이 있고 전체 순열 결과는 4*3*2*1=24여야 하지만 중복이 없다는 점을 고려하면 결과는 다음과 같이 6입니다.
['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
그래서 질문의 핵심은 다음과 같습니다. 두 가지 측면에서:
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 중국어 웹사이트(www.php.cn)를 주목하세요!