题目
思路分析
题目要求:在数组中求特定值的组合(可重复)
代码展示
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))
本文深入解析了LeetCode上的第39题“组合总和”,提供了两种递归方法的详细思路分析及Python代码实现。通过具体示例,展示了如何在数组中寻找特定目标值的所有可能组合,特别关注于可以重复使用数组元素的情况。

被折叠的 条评论
为什么被折叠?



