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我已经在回答中解释过了。太棒了,兄弟,我很高兴看到这个答案:)对二进制模式位置的描述这次,求幂是错误的…现在修复了它…我希望。