zoukankan      html  css  js  c++  java
  • 字符串排列

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

    第一种方法:字符串拼接

    function permutate(str) {
        var result=[];
        if(str.length==1){
            return [str]    
        }else{  
            var preResult=permutate(str.slice(1));
            for (var j = 0; j < preResult.length; j++) {
                for (var k = 0; k < preResult[j].length+1; k++) {
                    var temp=preResult[j].slice(0,k)+str[0]+preResult[j].slice(k);   
                    result.push(temp);              
                }
            }
            return result;
        }  
    }
    console.log(permutate("abc"));

    第二种方法:递归

    function permutation(str){
        let result = [];
        if(str.length === 1){
            return [str];
        }else{
            let last = permutation(str.slice(1));
            for(let i=0; i<last.length;i++){
                let ss = swap(str[0],last[i],result);
                result=ss;
            }
            return result;
        }
    }
    function swap(a,b,result){
        for(let i=0;i<b.length+1;i++){
            let newStr = b;
            let sss = newStr.split('');
            sss.splice(i,0,a); 
            result.push(sss.join(''))      
        }
        return result;
    }
    
    let res = permutation('abc');
    console.log(res);

    对于有重复的字符串来说按照上述算法输出出来会有重复的组合,简单的方法就是加一句Array.from(new Set(permutate("abc")));

  • 相关阅读:
    Vue中父子组件的通讯
    字符串svg代码转 base64 url
    Vue 中封装 websocket
    vue中使用Echarts,销毁原有的图表进行重新赋值
    Vue中常用表格(增删改查)
    刷新组件
    hdu1272小希的迷宫(并查集+判环)
    九余数定理
    Runtime Error可能的情况
    hdu2035 人见人爱A^B题解
  • 原文地址:https://www.cnblogs.com/xinsir/p/11283157.html
Copyright © 2011-2022 走看看