美文网首页好程序员大前端
好程序员web前端培训分享javascript枚举算法

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

作者: ab6973df9221 | 来源:发表于2019-04-12 16:01 被阅读2次

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

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

    代码:

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

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

    for(var 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]);  //回退到上一层的环境

    }

    相关文章

      网友评论

        本文标题:好程序员web前端培训分享javascript枚举算法

        本文链接:https://www.haomeiwen.com/subject/cbwcwqtx.html