Home  >  Article  >  Web Front-end  >  JavaScript interesting question: full arrangement and deduplication

JavaScript interesting question: full arrangement and deduplication

黄舟
黄舟Original
2017-01-22 14:42:551780browse

Given a string, display all its fully arranged results in the form of an array, requiring no duplicate results.

For example:

I have the string "aabb", and its full permutation result should be 4*3*2*1=24, but considering the requirement that there is no duplication, So the results are 6, as follows:

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

So the question The key lies in two aspects:

1. How to find the complete arrangement

2. How to deduplicate the results

To find the complete arrangement, you can use either recursive or non-recursive methods .

Deduplication can be achieved using a hash.

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

The above is the fun JavaScript question: full arrangement and deduplication. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn