【刷算法】字符串的全分列

问题形貌

输入一个字符串,按字典序打印出该字符串中字符的一切分列。比方输入字符串abc,则打印出由字符a,b,c所能分列出来的一切字符串abc,acb,bac,bca,cab和cba。

剖析

没啥好剖析的了,这个题不会,上网查的思绪,也许就是:

abc分化为abc、bac、cba(这是0和0交流、0和1交流、0和2交流

第一步得出的abc分化为abc、acb(这是1和1交流、1和2交流

第一步得出的bac分化为bac、bca(这是1和1交流、1和2交流

第一步得出的cba分化为cba、cab(这是1和1交流、1和2交流

代码完成

function Permutation(str)
{
    if(str === null || str === "")
        return [];
    var res = [];
    var index = 0;
    
    step(str.split(""), index, res);
    
    return res.sort();
}

function step(strArr, cur, res) {
    if(cur === strArr.length-1){
        var i = 0, str = "";
        while(i < strArr.length){
            str += strArr[i++];
        }
        res.push(str);
    }
    
    for(var i = cur;i < strArr.length;i++) {
        if(strArr[i] === strArr[cur] && i !== cur)
            continue;
        swap(strArr, i, cur);
        step(strArr, cur+1, res);
        swap(strArr, i, cur);
    }
}

function swap(arr, a, b) {
    var temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015699305
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞