Heim  >  Artikel  >  Backend-Entwicklung  >  Finden Sie alle Kombinationen, deren Summe n ergibt

Finden Sie alle Kombinationen, deren Summe n ergibt

WBOY
WBOYOriginal
2016-08-08 09:06:362239Durchsuche

Gegeben eine Zahl n

Anforderungen:
(1) Der Wert der ganzen Zahl auf der linken Seite der Gleichung ist 1~n-1.
(2) Es ist erforderlich, dass die Summe auf der linken Seite der Gleichung beträgt N.

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

Antwortinhalt:

Gegeben eine Zahl n

Anforderungen:
(1) Der Wert der ganzen Zahl auf der linken Seite der Gleichung ist 1~n-1.
(2) Es ist erforderlich, dass die Summe auf der linken Seite der Gleichung beträgt N.

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

Der Poster kann gehen und lernen 母函数

Dies sollte eine Vorlagenfrage für die übergeordnete Funktion sein

<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>
Für

C ändern Sie es einfach basierend auf dem oben Gesagten und verwenden Sie map und vector

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn