美文网首页
把一个数分解为任意几个数之和(JavaScript)

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

作者: LastStranger | 来源:发表于2021-07-12 15:16 被阅读0次
    // 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

    相关文章

      网友评论

          本文标题:把一个数分解为任意几个数之和(JavaScript)

          本文链接:https://www.haomeiwen.com/subject/iagrpltx.html