这篇文章将会记录一些日常开发用到的算法知识实现特定的业务需求,持续不定期更新,谢谢支持☺️
优化递归
一般代码,空间复杂度O(n)
1 2 3 4 5 6 7
| function factorial(n) { console.trace() if(n === 0) { return 1 } return n * factorial(n-1) }
|
优化后代码(尾递归),避免执行栈过多溢出,空间复杂度O(1)
1 2 3 4 5 6 7
| 'use strict' function factorial(n, total=1) { if(n === 1) { return total } return factorial(n-1, n * total) }
|
实现组合排列算法
我这里的业务场景是在计算彩票的多重组合结果,可直接运行调试,示例代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| static combine(arr,size){ let allResult = []; (function f(arr,size,result){ let arrLen = arr.length; if(size>arrLen){ return; } if(size === arrLen){ allResult.push([].concat(result,arr)) }else { for(let i=0;i<arrLen;i++){ let newResult = [].concat(result); newResult.push(arr[i]); if(size === 1){ allResult.push(newResult) }else { let newArr = [].concat(arr); newArr.splice(0,i+1); f(newArr,size-1,newResult) } } } })(arr,size,[]) }
|
持续更新中,敬请期待…
感谢您的阅读,本文由
lynhao 原创提供。如若转载,请注明出处:lynhao(
http://www.lynhao.cn)