文档章节

全排列算法

万城
 万城
发布于 2017/09/19 16:56
字数 280
阅读 2
收藏 0
//思路:swap方法用来交换位置执行全排列,然后用里面的if来判断这一次交换位置的是不是跟前一次相同fn的参数n是0在下面有写,return返回的方法里的参数是传进来的参数
var permAlone=(function(){
    var count;   //计数器
    function swap(arr,i,j) {    //交换
        if(i!=j) {
            var temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    }
    function fn(n,arr) { //为第n个位置选择元素           //n在下面声明了是0,直接在参数里声明的
        for(var i=n;i<arr.length;i++) {
            swap(arr,i,n);
            if( arr[n]==arr[n-1] ){ //和前一个元素比对,是否相等,只有前面的元素是固定不变的
                swap(arr,i,n); //跳过前先复原
                continue;
            }
            if(n<arr.length-1){  //判断条件这里需要改一下,只有当n为最后一个时才输出
                fn(n+1,arr); //为序号n+1的位置选取值
            }else{
                if( arr[n]!=arr[n-1] ){
                    count++; //计数
                }
            }
            swap(arr,i,n);
        }
    }
    return function(str){
        var start=new Date();
        var arr=str.split("");
        count=0;   //计数器归零
        fn(0,arr);
        console.log(new Date()-start+"ms");
        return count;
    };
})();
permAlone('abcdefa');

© 著作权归作者所有

上一篇: 修改日期格式
下一篇: 彻底去重
万城
粉丝 2
博文 50
码字总数 99199
作品 0
青岛
前端工程师
私信 提问

暂无文章

抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
3
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部