leetcode100组合总和
目录
【leetcode100】组合总和
1、题目描述
给你一个
无重复元素
的整数数组
candidates
和一个目标整数
target
,找出
candidates
中可以使数字和为目标数
target
的 所有
不同组合
,并以列表形式返回。你可以按
任意顺序
返回这些组合。
candidates
中的
同一个
数字可以
无限制重复被选取
。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为
target
的不同组合数少于
150
个。
示例 1:
输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。
2、初始思路
2.1 思路
本道题中,抽象为树状图为:
2.2 代码
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
res = []
path = []
def backtracking(candidates, target, sumCurrent, startIndex):
if sumCurrent > target:
return
if sumCurrent == target:
res.append(path.copy())
return
for i in range(startIndex,len(candidates)):
path.append(candidates[i])
sumCurrent += candidates[i]
backtracking(candidates, target, sumCurrent, i)
sumCurrent -= candidates[i]
path.pop()
backtracking(candidates, target, 0, 0)
return res