题目
思路分析
题目要求:在数组中求特定值的组合(可重复)
代码展示
from typing import List
class Solution:
def combinationSum1(self, candidates: List[int], target: int) -> List[List[int]]:
#对数组先排序,应该会好一些,但是事实上leetcode的测试用例,反而是不排序效果更好
candidates.sort()
#最终的结果
res = []
#当前的组合数组
reslist = []
def dfs(candidates,target,reslist):
#递归成功的出口
if target == 0 and reslist not in res:
res.append(reslist)
return
#递归失败的出口
if target<0:
return
#从数组的每一个元素开头
for i in range(len(candidates)):
print(reslist)
#这个递归太难,再理解
dfs(candidates[i:],target-candidates[i],reslist+[candidates[i]])
dfs(candidates,target,reslist)
return res
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
# candidates.sort()
res = []
reslist = []
def dfs(candidates,begin,target,reslist):
# 递归出口
if target == 0:
res.append(reslist)
return
elif target<0 or begin>=len(candidates):
return
#递归主体
else:
print(reslist)
#将当前元素跳过,不加入reslist,递归
dfs(candidates,begin+1,target,reslist)
#将当前元素加入reslist,递归
dfs(candidates,begin,target-candidates[begin],reslist+[candidates[begin]])
dfs(candidates,0,target,reslist)
return res
if __name__ == "__main__":
a = Solution()
print(a.combinationSum2([2,3,6,7],7))