#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param num int整型一维数组
# @param target int整型
# @return int整型二维数组
#
class Solution:
def combinationSum2(self , num: List[int], target: int) -> List[List[int]]:
#回溯用dfs+去重+剪枝
res=[]
tmp_res=[]
if len(num)==0:
return res
num=sorted(num)
if len(num)==1 and num[0] > target:
return res
def backtrack(target, start):
if target <= 0:
if target==0:
res.append(tmp_res[:])
return
for i in range(start, len(num)):
#去重
if i > start and num[i]==num[i-1]:
continue
tmp_res.append(num[i])
#递归
backtrack(target-num[i], i+1)
tmp_res.pop()
backtrack(target, 0)
return res
回溯模板
res=[]
path=[]
def dfs(start,path,num,res):
#start-初始位置,path-搜索路径,num-原数组,res-最终结果
if 结束条件
#浅拷贝path
res.append(path[:])
return
for i in range(len(num)):
path.append(num[i])
dfs(i+1,path,num,res)
#append后,地址没变,需要pop,撤销回溯
path.pop()