首頁  >  文章  >  後端開發  >  求和為n的所有組合

求和為n的所有組合

WBOY
WBOY原創
2016-08-08 09:06:362195瀏覽

給定一個數 n

要求:
(1)等式左邊的整數取值為 1~n-1.
(2)要求等式左邊之和為n。

<code>若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;</code>

回覆內容:

給定一個數 n

要求:
(1)等式左邊的整數取值為 1~n-1.
(2)要求等式左邊之和為n。

<code>若 n = 3;
1 + 1 + 1 = 3;
1 + 2 = 3;</code>

樓主可以去學習下 母函數

這應該是母函數的模板題

<code>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 ] ]</code>

C++的話基於上面改就好了,用mapvector

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn