def combinationSum(self, candidates, target):
res = []
n = len(candidates)
candidates.sort()
def back(ans, start, tmp):
# 将”出口“放在递归函数的最开始
if ans == target:
res.append(tmp)
return True
elif ans > target:
return True
else:
for i in range(start, n):
# 为了之后能够回溯,递归的参数用加号连结,不改变参数本来的值
if back(ans + candidates[i], i, tmp + [candidates[i]]):
# 剪枝,如果某个数不符合条件,那么也就没有必要接着遍历更大的数了
break
# 回溯之后换下一个数继续遍历
return False
back(0, 0, [])
return res