Javascript 在数字数组中生成有效的数字组合
我试图从一个数字数组中生成所有有效的数字组合。假设我们有以下几点:Javascript 在数字数组中生成有效的数字组合,javascript,combinations,combinatorics,Javascript,Combinations,Combinatorics,我试图从一个数字数组中生成所有有效的数字组合。假设我们有以下几点: let arr = [1, 2, 9, 4, 7]; 我们需要输出如下内容: 1 2 9 4 7 1 2 9 47 1 2 94 7 1 2 947 1 29 4 7 1 29 47 1 294 7 1 2947 12 9 4 7 12 9 47 12 94 7 12 947 129 4 7 129 47 1294 7 12947 无效的数字是91、497、72等等 我试过了,但对结果不满意: const组合=(arr)=
let arr = [1, 2, 9, 4, 7];
我们需要输出如下内容:
1 2 9 4 7
1 2 9 47
1 2 94 7
1 2 947
1 29 4 7
1 29 47
1 294 7
1 2947
12 9 4 7
12 9 47
12 94 7
12 947
129 4 7
129 47
1294 7
12947
无效的数字是91、497、72等等
我试过了,但对结果不满意:
const组合=(arr)=>{
设i,j,temp;
让结果=[];
设arrLen=arr.长度;
让power=Math.pow;
let组合=功率(2,arrLen);
对于(i=0;i<组合;i+=1){
温度='';
对于(j=0;j
.as console wrapper{max height:100%!important;top:0;}
因此您需要迭代所有数字之间的“space”和“not space”的所有组合。对于n
项,将有n-1
空格和2**(n-1)
不同的列表
因此,您可以这样做以获得所有可能的列表:
const组合=arr=>{
常数长度=阵列长度;
常数n=数学功率(2,len-1);
常量组合=[];
for(设i=0;iline.join(“”)).join('\n'))代码>
.as console wrapper{max height:100%!important;top:0;}
您可以采用递归方法,迭代数组并插入空格或不插入空格,然后用递增的索引对同一函数进行fork调用
函数组合(数组){
功能叉(i,p){
if(i==array.length){
结果:推挤(p);
返回;
}
fork(i+1,p+“”+array[i]);
fork(i+1,p+array[i]);
}
var结果=[];
fork(1,数组[0]。toString());
返回结果;
}
log(combine([1,2,9,4,7])代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以在使用3指针的地方使用下面的代码来完成此操作
第一个指针将第0个位置打印到光标位置
第二个指针在每次迭代中将光标打印到差异位置
第三个指针将光标位置打印到最后一个位置
让arr=[1,2,9,4,7];
log(arr.join(',');
for(设diff=2;diff=i+diff;j++,i++){
var-temp=[];
如果(i>0)
临时推送(arr.slice(0,i).join(',');
温度推送(arr.slice(i,j.)连接(“”));
如果(j此代码符合您的要求:
const arr=[1,2,9,4,7],
result=Array.from({length:2**(arr.length-1)},({uu,index)=>index.toString(2).padStart(arr.length-1,“0”))
.map((二进制)=>JSON.parse(“[”+arr.map((num,position)=>num+(Number(二进制[position])?”,“:”).join(“+”)”);
console.log(结果);
.as控制台包装{最大高度:100%!重要;顶部:0;}
不满意?您需要指定您遇到的问题或错误。您希望通过此问题解决的问题是什么?结帐-您可能会找到适合的方法permutations@Xufox你的代码完全符合我的要求。谢谢。但很难理解它是如何工作的。@AlexandarTargov我已经在回答中解释过了。太棒了,兄弟,我很高兴看到这个答案:)对二进制模式位置的描述这次,求幂是错误的…现在修复了它…我希望。