首頁  >  文章  >  web前端  >  JavaScript趣題:全排列去重

JavaScript趣題:全排列去重

黄舟
黄舟原創
2017-01-22 14:42:551780瀏覽

給定一個字串,將它所有的全排列結果以數組的形式展示,要求沒有重複的結果。

舉個例子:

我有字串”aabb”,它的全排列結果應該有4*3*2*1=24種,但是考慮到要求為沒有重複,所以結果為6種,如下所顯示:

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

所以問題的關鍵在於2個面向:

1.如何求全排列

2 .如何對結果去重

求全排列,既可以用遞歸,也可以用非遞歸方法。

去重可以使用一個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);  
}

以上就是 JavaScript趣題:全排列去重的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn