plantilla de seguimiento de python

El número es el número de la pregunta.

#39 Suma combinada
Entrada: candidatos = [2,3,6,7], objetivo = 7
Salida: [[2,2,3],[7]]

candidates.sort()
n = len(candidates)
ans = []
path = []
def backtrack(candidates,target,sums,Index):
    if sums == target:
        ans.append(path[:])
    for i in range(Index,n):
        if sums + candidates[i] > target:
            return
        sums += candidates[i]       
        path.append(candidates[i])
        backtrack(candidates,target,sums,i)
        sums -= candidates[i]
        path.pop()

backtrack(candidates,target,0,0)
return ans

#40 Entrada de suma combinada II
: candidatos = [10,1,2,7,6,1,5], objetivo = 8,
salida:
[[1,1,6],[1,2,5],[1 ,7],[2,6]]

candidates.sort()
n = len(candidates)
ans = []
path = []
def backtrack(candidates,target,sums,Index):
    if sums == target:
        ans.append(path[:])
    for i in range(Index,n):
        if sums + candidates[i] > target:
            return
        if i > Index and candidates[i] == candidates[i-1]:  #去重
            continue
        sums += candidates[i]
        path.append(candidates[i])
        backtrack(candidates,target,sums,i+1) #遍历下一个数
        sums -= candidates[i]
        path.pop()
backtrack(candidates,target,0,0)
return ans

#46 Arreglo completo
Entrada: nums = [1,2,3]
Salida: [[1,2,3],[1,3,2],[2,1,3],[2,3,1], [3,1,2],[3,2,1]]

ans = []
path = []
def backtrack(path,choices):
    if len(path) == len(nums):
        ans.append(path[:])

    for i in choices:
        if i in path:
            continue
        path.append(i)
        backtrack(path,choices)
        path.pop()
    return ans
backtrack([],nums)
return ans

#47 Arreglo completo II
Entrada: nums = [1,1,2]
Salida:
[[1,1,2][1,2,1],[2,1,1]]

if not nums: return []
res = []
used = [0] * len(nums)
def backtracking(nums, used, path):
    if len(path) == len(nums):
        res.append(path.copy())
        return
    for i in range(len(nums)):
        if not used[i]:
            if i>0 and nums[i] == nums[i-1] and not used[i-1]:
                continue
            used[i] = 1
            path.append(nums[i])
            backtracking(nums, used, path)
            path.pop()
            used[i] = 0
backtracking(sorted(nums),used,[])
return res

#77
Entrada: n = 4, k = 2
Salida:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]

ans = []
path = []
nums = [i for i in range(1,n+1)]
def backtrack(nums,Index):
    if len(path) == k:
        ans.append(path[:])
    for i in range(Index,len(nums)):
        path.append(nums[i])
        backtrack(nums,i+1)
        path.pop()
    return ans
backtrack(nums,0)
return ans

#78 Subconjunto
Entrada: nums = [1,2,3]
Salida: [[],[1],[2],[1,2],[3],[1,3],[2,3] , [1,2,3]]

res = []  
path = []  
def backtrack(nums,startIndex):
    res.append(path[:])
    for i in range(startIndex,len(nums)):
        path.append(nums[i])
        backtrack(nums,i+1)
        path.pop()
backtrack(nums,0)
return res

#90 Subconjunto II
entrada: nums = [1,2,2]
salida: [[],[1],[1,2],[1,2,2],[2],[2,2]]

res = []  
path = [] 
def backtrack(nums,startIndex):
    res.append(path[:])
    for i in range(startIndex,len(nums)):
        if i > startIndex and nums[i] == nums[i - 1]:
            continue
        path.append(nums[i])
        backtrack(nums,i+1) 
        path.pop()
    return res
nums = sorted(nums)
backtrack(nums,0)
return res

Supongo que te gusta

Origin blog.csdn.net/qq_46500711/article/details/124695038
Recomendado
Clasificación