当前位置:Gxlcms > PHP教程 > 求和为n的所有组合

求和为n的所有组合

时间:2021-07-01 10:21:17 帮助过:5人阅读

给定一个数 n

要求:
(1)等式左边的整数取值为 1~n-1.
(2)要求等式左边之和为n。

若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;

回复内容:

给定一个数 n

要求:
(1)等式左边的整数取值为 1~n-1.
(2)要求等式左边之和为n。

若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;

楼主可以去学习下 母函数

这应该是母函数的模板题

function calcN (n) {
    var res = [],
        cache = {};

    loop(n);

    function loop(k, arr) {
        arr = arr || [];
        var i = 1, count = k / 2 | 0;
        cache[k] = true;
        while (i <= count) {
            
            res.push(arr.concat([i, k - i]));

            if (!cache.hasOwnProperty(i)) {
                loop(i, [k - i].concat(arr));
            }

            if (!cache.hasOwnProperty(k - i)) {
                loop(k - i, [i].concat(arr));
            }

            i++;        
        }
  }
  return res;
}
// 测试部分:
console.log(calcN(5));
// 
输出 [ [ 1, 4 ], [ 1, 1, 3 ], [ 1, 1, 1, 2 ], [ 1, 1, 1, 1, 1 ], [ 1, 2, 2 ], [ 2, 3 ] ]

C++的话基于上面改就好了,用mapvector

人气教程排行