JS实现 数组 全排
来源:互联网 发布:mpu9250好用的源码 编辑:程序博客网 时间:2024/06/07 02:42
最近面试的时候遇到了数组全排的问题
问题如下
假设有一个集合 [‘foo’, ‘bar’, ‘hello’, ‘world’],求这个集合里单词组合起来的所有不同的结果,比如:
foobarhelloworld
barfoohelloworld
…
相信很多宝宝都遇到过类似的笔试题,天下程序员是一家,前端也要精于算法,才能走的长远,所以要
♪ hustle hustle hustle
♪ hustle hustle everyday
♪ hustle hustle hustle
♪ hustle hustle anyway
思路:
数组 arr = [‘a’, ‘b’, ‘c’]
如果我有一个数组[‘a’, ‘b’] 然后遍历arr 找到不在[‘a’, ‘b’] 的元素,将这个元素加入 就得到了 arr
那么后退一步,
如果我有一个数组[‘a’] 然后遍历arr, 找到不在[a’,] 中的元素,将这个元素加入 就得到了 [‘a’, ‘b’] ,或 [‘a’, ‘c’]
….
如果我有一个数组[] 然后遍历arr 找到不在 []中的元素,将这个元素加入 就得到了 [‘a’] 或 [‘b’] 或 [‘c’]
我们要写一个函数,实现图片上的调用
代码如下:
var arr = ['foo','bar','hello','world']; var count = 1; function getStr(a){ for (var i = 0; i < arr.length; i++) { // indexOf 是es6数组的方法,如果不存在返回-1,存在返回下标 if(a.indexOf(arr[i])<0){ //数组 a 中不存在 arr[i],将arr[i]添加到数组末尾 a.push(arr[i]); if(a.length==arr.length){ console.log(count++ + ': ' +a.join("")); }else{ //结束一次for循环 进行了4次递归 getStr(['foo']) getStr(['bar']) getStr(['hello']) getStr(['world']) getStr(a); } //一定从数组 a 中删除arr[i],进行下次循环,如果不删除就只能获得一种结果了 a.pop(); } } getStr([])
除去注释只用了15行代码,通过上面的方法 我们实现了单个数组全排
更多方法阅读
思考问题:
如何实现多个数组全排呢?
hustle hustle hustle o(╯□╰)o
阅读全文
1 0
- JS实现 数组 全排
- 全排递归实现
- js数组倒排算法
- JS数组随机排数
- 实现序列简单的全排、错排、组合
- JS特色快排实现
- js 简单快排实现
- MapReduce实现倒排索引全排序
- 给定一个数组,奇数全排在前面,偶数全排在后面
- 全排
- 冒泡和快排的js实现
- 递归实现数组全排列
- 数组全排列递归实现
- java实现数组全排列
- JS 实现自动补全
- js实现全排列组合算法
- js如何实现全排列
- 数字数组的全排列(js)
- Fiddler-过滤功能+断点调试详解
- php-fpm的max_chindren的一些误区
- 初级学Spring MVC
- response及验证码例子
- NoClassDefFoundError org/codehaus/plexus/compile/util/scan/mapping/SuffixMapping
- JS实现 数组 全排
- 自定义泛型
- C#中交换两个数的值
- 微服务架构中 API 的开发与治理
- spring boot Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @Spr
- tomcat启动访问指定目录
- CDH HBASE使用solr创建二级索引,更新删除索引
- 数据结构学习笔记(7)---二叉树递归与非递归遍历
- markdown写法,持续更新