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")));

  • 相关阅读:
    ASP.NET 文件下载
    Asp.net 加密解密类
    ASP.Net 获取服务器信息
    Visual Studio 2013 和 ASP.NET 预览
    Windows Server 2012安装时所需要的KEY
    WordPress主题模板层次和常用模板函数
    小meta的大作用
    《淘宝技术这十年》之LAMP架构的网站
    面试题(八)
    面试题(七)
  • 原文地址:https://www.cnblogs.com/xinsir/p/11283157.html
Copyright © 2011-2022 走看看