0.总结

  • 怎么写递归保证得到的结果元组是不重复的?
  • 怎么写递归保证可以重复选数?
  • 博客来源:LawsonAbs@CSDN

1.​​题目​​

2.思想

深度优先搜索。主要需要考虑两点:

  • 如何去重?
    去重就需要保证,访问了当前的下标i之后,不能再访问​​<i​​的元素。
  • 如何保证每个数字可以重复选择?
    递归的时候只要保证每次访问的是当前这个下标即可,也就是需要将数组下标传入到函数中。

3.代码

import copy
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
candidates.sort()
res = []
for i in range(len(candidates)):
total = candidates[i]
self.dfs(res,candidates,target,total,[total],i)
return res

# 深搜只能找当前下标之后的数字
# nums 表示
def dfs(self,res,candidates,target,total,nums,idx):
if total == target:
res.append(copy.copy(nums))
return
for i in range(idx,len(candidates)):
num = candidates[i]
if total + num > target: # 直接返会当前这次遍历
break
else:
nums.append(num)
self.dfs(res,candidates,target,total+num,nums,i)
nums.pop()