澳门新葡亰553311b > 新葡亰Web前端 > javascript枚举算法

javascript枚举算法
2020-01-05 15:47

题目:在1,2,3,4,5 五个数中,我们随机选取 3个数。问有多少种取法?并且把每种取出数的方法列举出来

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

代码:

var arr=[1,2,3,4,5]; for(var i=0;i5;i++){ for{ for(var k=0;k5;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;inumber.length;i++){ //循环数据 for(var j=0;jstate.length;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]); //回退到上一层的环境}

如果分析清楚,就没啥难度啦!

上一篇:Content-Type属性的取值和作用 下一篇:没有了