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]]
Пояснение
Четыре двойки дают 8, как и 2 + 3 + 3 и 2 + 6. Все три варианта начинаются с 2, поэтому порядок задаёт второе значение: 2, затем 3, затем 6. Без 2 остаются только 3 и 6, а любая их комбинация кратна 3, а 8 не кратно 3.

lock icon+12 скрытых тестов при отправке

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