|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
也是JSA代码,供参考
- function 生成排列组合(){
- const n=5, szarr=Range("a1:a12").Value2.flat();
- let arr=myplzh(szarr,"组合",szarr.length,n);
- Range("g1").Resize(arr.length,arr[0].length).Value2=arr;
- function myplzh(szarr,type,m,n){
- if (m<n) return;
- let arr=[], temp=new Array(n).fill(null);
- let h=0; //h:统计递归所在的层数,不超过最底层(n-1)
- let getplzh=(k)=>{ //k:递归循环的起始位置
- for (let i=k;i<m;i++){
- if (temp.includes(szarr[i])) continue; //统计不重复值
- temp[h]=szarr[i];
- if (temp[n-1]!=null) arr.push([...temp]);
- if (h<n-1){ //判断是否到达底层(n-1),未达到则继续往下一层递归
- h++; //层数递增
- getplzh(type=="组合"?i+1:0); //递归,如果是组合,起始位置从i+1开始,否则从0开始
- }
- }
- temp[h]=null; //退出本层之前,将元素位置置空(null)
- h--; //循环结束,退回到递归的上一层
- }
- getplzh(0);
- return arr;
- }
- }
复制代码 |
评分
-
1
查看全部评分
-
|