Dada una matriz candidatos de elementos que no se repiten y un objetivo de número de destino, se pueden encontrar todos los candidatos a los números de destino y combinaciones de los mismos.
un número ilimitado de candidatos pueden ser seleccionados se repite.
Descripción:
Todas las cifras (incluido el blanco) son números enteros positivos.
Conjunto de soluciones no puede contener combinaciones de duplicados de los mismos.
class Solution(object):
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
self.res = []
def helper(nums,tmp,i):
if tmp == target:
self.res.append(nums)
return
if tmp>target:
return
for j in range(i,len(candidates)):
helper(nums+[candidates[j]],tmp+candidates[j],j)
helper([],0,0)
return self.res
Teniendo en cuenta una serie de candidatos y el objetivo número uno meta, usted puede encontrar todos los candidatos a los números de destino y combinaciones.
Cada número de candidatos utilizan sólo una vez en cada combinación.
Descripción:
Todas las cifras (incluyendo el número de destino) son números enteros positivos.
Conjunto de soluciones no puede contener combinaciones de duplicados de los mismos.backtracking
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
if not candidates:
return []
candidates.sort()
n = len(candidates)
res = []
def backtrack(i, tmp_sum, tmp_list):
if tmp_sum == target:
res.append(tmp_list)
return
for j in range(i, n):
if tmp_sum + candidates[j] > target : break
if j > i and candidates[j] == candidates[j-1]:continue
backtrack(j + 1, tmp_sum + candidates[j], tmp_list + [candidates[j]])
backtrack(0, 0, [])
return res