加载中…
个人资料
好程序员
好程序员
  • 博客等级:
  • 博客积分:0
  • 博客访问:8,904
  • 关注人气:5
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

好程序员web前端培训分享javascript枚举算法

(2019-04-15 11:14:10)
分类: web前端培训

好程序员web前端培训分享javascript枚举算法题目:在12345 五个数中,我们随机选取 3个数。问有多少种取法?并且把每种取出数的方法列举出来。

 

乍看这道题,其实感觉没什么难度。三个for循环不就解决问题了。

 

代码:

 

var arr=[1,2,3,4,5];

    for(var i=0;i<5;i++){

        forvar j=0;j<5;j++{

            for(var k=0;k<5;k++)

                if(arr[i]!=arr[j]!=arr[j]){

                    console.log(arr[i]+''+arr[j]+arr[k]);

                }

        }

    }

 

 

这样子就可以打印出来每种遍历的情况。是不是看起来很简单。但是,如果我们需要解决这一类问题的话,此解法就感觉不足了。比如说:我们在十个数取出八个数求结果,一百个数取出八十个数求出结果。那么,我们分别要循环8次和80次,那么这肯定是不行的。那么,怎么办呢?? 其实采用枚举就可以了。

 

代码:

 

var  number=[1,2,3,4,5];  //我们操作的数组

    var state=[];   //记录状态的数组

    var shu=[];    //枚举出来答案得到的数组。

    function dfs(step,n){   //n,代表取几个数出来。

        var flag=true;

            if(step==n){  //判断条件,判断是否取出来了个数。

                    console.log(state.join(""));

                    shu.push(state.join(""));  //把取出来的书方法数组中

                    return 0; //结束循环

            }

 

 

            for(var i=0;i循环数据

                    for(var j=0;j判断时候取出来重复的数。

                        if(state[j]==number[i]){

                            flag=false;

                            break;

                        }

                    }

                    if(flag){

                            state.push(number[i]);  //保存当前环境

                            dfs(step+1,n);

                            state.pop(number[i]);  //回退到上一层的环境

                    }

 

                    flag=true;

 

                }

        }

 

 

        dfs(0,4);

 

        console.log(shu.length);

 

 

其实最重要的代码就是上面

 

if(flag){

state.push(number[i]);  //保存当前环境

dfs(step+1,n);

state.pop(number[i]);  //回退到上一层的环境

}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有