Menu
CoddyTech

Combination Sum

MittelBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Du erhältst eine Liste candidates mit verschiedenen positiven ganzen Zahlen und eine positive ganze Zahl target. Finde jede Kombination von Kandidaten, deren Summe genau target ergibt, wobei du jeden Kandidaten beliebig oft verwenden kannst. [2, 3, 3] und [3, 2, 3] sind dieselbe Kombination.

Gib jede Kombination in aufsteigender Reihenfolge und die Kombinationen in lexikografischer Reihenfolge zurück: An der ersten Position, an der sich zwei Kombinationen unterscheiden, kommt diejenige mit dem kleineren Wert zuerst.

Funktion

combinationSum(candidates: integer-array, target: integer) → integer-2d-array
candidatesinteger-array
die verschiedenen Werte, die du in beliebiger Reihenfolge und beliebig oft verwenden kannst
targetinteger
Die Gesamtsumme jeder Kombination muss genau erreichen
Gibt zurückinteger-2d-array
jede Kombination, deren Summe dem Zielwert entspricht, jeweils aufsteigend sortiert und lexikografisch geordnet

Einschränkungen

  • 1 ≤ candidates.length ≤ 50
  • 2 ≤ candidates[i] ≤ 500
  • 2 ≤ target ≤ 500
  • Alle Werte in candidates sind unterschiedlich und haben keine bestimmte Reihenfolge.
  • Mindestens eine Kombination erreicht target, und höchstens 150 tun das.

Beispiele

Eingabe
candidates = [6, 2, 3]target = 8
Ausgabe
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
Erklärung
Vier 2en, 2 + 3 + 3 und 2 + 6 ergeben alle 8, geordnet nach ihrem zweiten Wert. Ohne eine 2 bleiben nur 3en und 6en übrig, und ihre Summen sind Vielfache von 3, was bei 8 nicht der Fall ist.
challenge icon

Weiterführende Frage

Jeder Kandidat darf nun höchstens einmal verwendet werden, und candidates kann wiederholte Werte enthalten. Wie änderst du die Suche, damit keine Kombination doppelt vorkommt?

Code zurücksetzen
def combinationSum(candidates, target):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

candidates = [6, 2, 3]
target = 8

Erwartete Ausgabe

[[2, 2, 2, 2], [2, 3, 3], [2, 6]]