把一个数分解为任意几个数之和(JavaScript)

2021-07-12  本文已影响0人  LastStranger
// 2 11
// 3 21 111
// 4 31 22 211 1111
// 5 41 32 311 221 2111 11111
// 6 51 42 411 33 321 3111 222 2211 21111 111111
function dd(n) { // 返回n的所有集合
  if (n === 2) {
    return [[1, 1]]
  }
  const arr = [];
  for (let i = 1; i < n; i++) {
    if (i <= n / 2) {
      arr.push([n - i, i])
    }
    for (const each of dd(i)) {
      if (num - i >= each[0]) {
        arr.push([num-i, ...each])
      }
    }
  }
  return arr;
}

分析: 就是不断的分解过程, 拿6来举例, 6分解为5+1, 然后4 + 2, 其中2可以继续分解, 然后 3+ 3, 其中 3可以继续分解, 到这里就不在分解,因为会重复, 所以6的分解就变成了"1的所有分解集合每个加上5, 2的所有分解集合加上4, 3的所有分解集合加上3". 注意一点,数据排序一定是从大到小排列,

2021.10.25

太菜了,写了那么长时间,耗了大半年时间,还特意写了一篇文章巩固印象,结果几个月后还是卡住了,

I believe your apartment is on fire

上一篇 下一篇

猜你喜欢

热点阅读