Arrays 如何列出等于X的N个索引的所有组合

Arrays 如何列出等于X的N个索引的所有组合,arrays,algorithm,sorting,sum,Arrays,Algorithm,Sorting,Sum,我正在尝试使用以下规则返回数组: 1.总和为X的所有唯一组合 2.每个数字都分配了一个字母 3.每个字母一次只能使用一次 // Cartesian join function cartesian() { let r = [] let arg = arguments let max = arg.length-1 function helper(arr, i) { for (let j=0, l=arg[i].length; j<l; j++) { let

我正在尝试使用以下规则返回数组:
1.总和为X的所有唯一组合
2.每个数字都分配了一个字母
3.每个字母一次只能使用一次

// Cartesian join
function cartesian() {
  let r = []
  let arg = arguments
  let max = arg.length-1

  function helper(arr, i) {
    for (let j=0, l=arg[i].length; j<l; j++) {
      let a = arr.slice(0); // clone arr
      a.push(arg[i][j]);
      if (i==max)
        r.push(a);
      else
        helper(a, i+1);
    }
  }
  helper([], 0);
  return r;
}

let a = ['A','B','C'];
let a1 = ['1','2','3'];

let arrays = cartesian(a, a1)

for(let i=1; i<arrays.length; i++) {
  file[i] = arrays[i].join('').toString();
}
//笛卡尔连接
笛卡尔函数(){
设r=[]
设arg=arguments
设max=arg.length-1
功能助手(arr,i){

对于(让j=0,l=arg[i].length;j在您的示例中,您最多可以使用任意数字3次,因此我将从一个数组开始

[1,1,1,2,2,2,3,3,3]
然后找到总和为5的所有组合,同时最多使用3个条目,每个条目只使用一次

找到数字后,您可以分配字母。例如,数字
1,1,3
可以表示为
A1、B1、C3
A1、B3、C1
A3、B1、C1
。如果您有三个不同的数字,则有六种分配字母的方法

简而言之,首先找到数值解,然后指定字母