Javascript 在给定数量的桩中,所有可能的条款变化加起来等于总和?

Javascript 在给定数量的桩中,所有可能的条款变化加起来等于总和?,javascript,combinations,Javascript,Combinations,如何使用javascript在给定数量的堆中使所有可能的术语变化相加为总和? 假设我有一个10的和,我想把它分成4堆,只有正项和零 function getCombinations(sum, piles){ ... } getCombinations(10,4); 在二维数组中返回如下内容: [ [3,3,3,1], [3,3,1,3], [7,1,1,1], [10,0,0,0], ... ] 不强制返回[3,3,3,1]和[3,3,1,3]

如何使用javascript在给定数量的堆中使所有可能的术语变化相加为总和? 假设我有一个10的和,我想把它分成4堆,只有正项和零

function getCombinations(sum, piles){
    ...
}
getCombinations(10,4);
在二维数组中返回如下内容:

[
    [3,3,3,1],
    [3,3,1,3],
    [7,1,1,1],
    [10,0,0,0],
    ...
]
不强制返回[3,3,3,1]和[3,3,1,3]作为不同的解决方案,最快的方法就可以了。我将只与小的数字,最大总和可能是10


这是硬币计数问题的一种变体,但我希望返回解决方案,我有一组给定的堆,我使用所有的正项(和零),而不仅仅是特定的硬币值。

这里有一种实用的方法:

function getCombinations(sum, piles){
   var array =[];
      for(var i = 1; i <= piles; i ++) {

   var subArray = Array.apply(null, Array(4)).map(
        function () {  
            return Math.floor(Math.random() * sum)});
 
   array.push(subArray);
 

  }
   return array;
}
 var result = getCombinations(10,4);
函数getcompositions(和、堆){
var数组=[];

对于(var i=1;i这应该可以做到:

const矩阵=(num,cols)=>{
常量矩阵=[[num,…[…数组(cols-1)].map(()=>0)];
常量散列=新集合;
常数coef=数学功率(10,cols-1);
设位数=10*coef-1;
while(数字-->=coef){
常量nums=(''+位数).split('').map(d=>+d);
常量hash=nums.sort((a,b)=>b-a.join(“”);
if(hashes.has(hash)| | nums.reduce((a,b)=>a+b,0)!==num)
继续;
hash.add(hash);
矩阵推送(nums);
}
收益矩阵;
};

控制台日志(矩阵(10,4))
我得到了一个未定义的数组。我已经编辑了它,所以你可以再试一次。RETURN关键字必须与要返回的项目在同一行。然后就可以工作了。这不会返回我期望的结果。堆中的数字应该加起来求和,就像在我的示例RETURN数组中一样。我需要所有可能的组合。