Menu
CoddyTech

Combination Sum

異なる正の整数のリスト candidates と正の整数 target が与えられます。値の合計がちょうど target になる候補の組み合わせをすべて見つけてください。各候補は好きなだけ使用できます。同じ値を同じ回数使用する組み合わせは同一とみなされるため、[2, 3, 3] と [3, 2, 3] は1つとして数えます。

各組み合わせの値を昇順に並べて返し、組み合わせ自体は辞書順に並べてください。2つの組み合わせを左から値ごとに比較し、最初に異なる値が小さい方を先にします。

関数

combinationSum(candidates: integer-array, target: integer) → integer-2d-array
candidatesinteger-array
使用できるさまざまな値を、順不同で好きなだけ何度でも
targetinteger
すべての組み合わせの合計が、ちょうど到達しなければなりません
戻り値integer-2d-array
合計が目標値となるすべての組み合わせを、それぞれ昇順に並べ、辞書順で列挙

制約

  • 1 ≤ candidates.length ≤ 50
  • 2 ≤ candidates[i] ≤ 500
  • 2 ≤ target ≤ 500
  • candidates 内のすべての値は異なり、特定の順序には並んでいません。
  • 少なくとも1つの組み合わせがtargetに到達し、最大でも150個が到達します。

例

入力
candidates = [6, 2, 3]target = 8
出力
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
説明
2を4つ合わせると8になり、2 + 3 + 3や2 + 6でも8になります。3つとも2から始まるので、2つ目の値で順序が決まります。つまり、2、次に3、そして6です。2がなければ、3と6だけになり、それらをどのように組み合わせても3の倍数になりますが、8は3の倍数ではありません。

lock icon提出時に隠しテスト+12件

challenge icon

発展問題

各候補は最大1回までしか使えなくなり、candidatesには重複した値が含まれる場合があります。同じ組み合わせが2回現れないようにするには、探索をどのように変更すればよいでしょうか?

コードをリセット
def combinationSum(candidates, target):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

ケース3

入力

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

期待値

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