>  기사  >  웹 프론트엔드  >  JavaScript 흥미로운 질문: 전체 배열 및 중복 제거

JavaScript 흥미로운 질문: 전체 배열 및 중복 제거

黄舟
黄舟원래의
2017-01-22 14:42:551822검색

문자열이 주어지면 모든 순열 결과를 배열 형식으로 표시하므로 중복된 결과가 필요하지 않습니다.

예:

"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)를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.