Menu
CoddyTech

Combination Sum

Дан список различных положительных целых чисел candidates и положительное целое число target. Найдите все комбинации чисел из списка, сумма которых в точности равна target. Каждое число можно использовать любое количество раз. [2, 3, 3] и [3, 2, 3] — это одна и та же комбинация.

Верните каждую комбинацию в порядке возрастания, а сами комбинации — в лексикографическом порядке: на первой позиции, где две комбинации различаются, сначала должна идти комбинация с меньшим значением.

Функция

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 различны и не упорядочены.
  • Не менее одной комбинации достигает target, и не более 150 комбинаций делают это.

Примеры

Ввод
candidates = [6, 2, 3]target = 8
Вывод
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
Пояснение
Четыре двойки, 2 + 3 + 3 и 2 + 6 — всё это даёт 8, в порядке возрастания второго значения. Без двойки остаются только тройки и шестёрки, а их суммы кратны 3, чему число 8 не соответствует.
challenge icon

Дополнительный вопрос

Теперь каждый кандидат можно использовать не более одного раза, а candidates может содержать повторяющиеся значения. Как изменить поиск, чтобы одна и та же комбинация не появлялась дважды?

Сбросить код
def combinationSum(candidates, target):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

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

Ожидаемый вывод

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