将数组(元素组合)划分为自定义分区的所有方法

将数组(元素组合)划分为自定义分区的所有方法,第1张

将数组(元素组合)划分为自定义分区的所有方法

这是一个递归公式,它将枚举实际元素的组合。在列表中

[2,2]
,每个
2
被视为一个不同的元素。我们可以输入任意模式,例如
[1,2,3,4,5,6]
使用pattern划分为所有组合
[[x],[x,x],[x,x,x]]

function f(ns, subs){  if (ns.length != subs.reduce((a,b) => a+b))    throw new Error('Subset cardinality mismatch');  function g(i, _subs){    if (i == ns.length)      return [_subs];    let res = [];    const cardinalities = new Set();    function h(j){      let temp = _subs.map(x => x.slice());      temp[j].push(ns[i]);      res = res.concat(g(i + 1, temp));    }    for (let j=0; j<subs.length; j++){      if (!_subs[j].length && !cardinalities.has(subs[j])){        h(j);        cardinalities.add(subs[j]);      } else if (_subs[j].length && _subs[j].length < subs[j]){        h(j);      }    }    return res;  }  let _subs = [];  subs.map(_ => _subs.push([]));  return g(0, _subs);}console.log('n[0,1,2,3], [2,2]:');let str = '';for (let i of f([0,1,2,3], [2,2]))  str += 'n' + JSON.stringify(i);console.log(str);console.log('n[0,1,2,3], [1,3]:');str = '';for (let i of f([0,1,2,3], [1,3]))  str += 'n' + JSON.stringify(i);console.log(str);console.log('n[0,1,2,3,4,5,6,7,8,9], [1,2,3,4]:');str = '';for (let i of f([0,1,2,3,4,5,6,7,8,9], [1,2,3,4]))  str += 'n' + JSON.stringify(i);console.log(str);


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5643238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存