Menu
CoddyTech

Combination Sum

MedioBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Se te da una lista candidates de distintos enteros positivos y un entero positivo target. Encuentra todas las combinaciones de candidatos cuyos valores sumen exactamente target, donde cada candidato puede usarse tantas veces como quieras. Dos combinaciones son iguales cuando usan los mismos valores la misma cantidad de veces, así que [2, 3, 3] y [3, 2, 3] cuentan como una sola.

Devuelve cada combinación con sus valores en orden ascendente y las combinaciones en orden lexicográfico: compara dos combinaciones valor por valor desde la izquierda, y la que tenga el valor más pequeño en la primera diferencia va primero.

Función

combinationSum(candidates: integer-array, target: integer) → integer-2d-array
candidatesinteger-array
los distintos valores que puedes usar, en cualquier orden y tantas veces como quieras
targetinteger
el total de cada combinación debe alcanzar exactamente
Devuelveinteger-2d-array
cada combinación que suma el objetivo, cada una en orden ascendente, enumeradas en orden lexicográfico

Restricciones

  • 1 ≤ candidates.length ≤ 50
  • 2 ≤ candidates[i] ≤ 500
  • 2 ≤ target ≤ 500
  • Todos los valores de candidates son diferentes y están en un orden cualquiera.
  • Al menos una combinación alcanza target, y como máximo 150 lo hacen.

Ejemplos

Entrada
candidates = [6, 2, 3]target = 8
Salida
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
Explicación
Cuatro doses hacen 8, al igual que 2 + 3 + 3 y 2 + 6. Las tres opciones empiezan con 2, así que el segundo valor establece el orden: 2, después 3 y luego 6. Sin un 2, solo tienes 3 y 6, y cualquier combinación de estos es múltiplo de 3, que no es el caso de 8.

lock icon+12 pruebas ocultas al enviar

challenge icon

Para ir más allá

Cada candidato ahora puede usarse como máximo una vez, y candidates puede contener valores repetidos. ¿Cómo cambias la búsqueda para que ninguna combinación aparezca dos veces?

Restablecer código
def combinationSum(candidates, target):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

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