给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括
target)都是正整数。 - 解集不能包含重复的组合。
示例 1:
输入: candidates =[2,3,6,7],target =7, 所求解集为: [ [7], [2,2,3] ]
示例 2:
输入: candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
C++
class Solution {
public:
void DFS(vector<int>& candidates, vector<vector<int>> &res, vector<int>& tmp, int k, int target, int sum)
{
if(sum==target)
{
res.push_back(tmp);
return;
}
else if(sum>target)
{
return;
}
for(int i=k;i<candidates.size();i++)
{
sum+=candidates[i];
tmp.push_back(candidates[i]);
DFS(candidates,res,tmp,i,target,sum);
tmp.pop_back();
sum-=candidates[i];
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target)
{
sort(candidates.begin(),candidates.end());
vector<vector<int>> res;
vector<int> tmp;
int sum=0;
DFS(candidates, res, tmp, 0, target, sum);
return res;
}
};
python
class Solution:
def DFS(self, candidates, res, tmp, target, k, su):
if su==target:
res.append(tmp.copy())
return
elif su>target:
return
for i in range(k,len(candidates)):
su+=candidates[i]
tmp.append(candidates[i])
self.DFS(candidates,res,tmp,target,i,su)
del tmp[-1]
su-=candidates[i]
def combinationSum(self, candidates, target):
\"\"\"
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
\"\"\"
res=[]
tmp=[]
su=0
self.DFS(candidates,res,tmp,target,0,su)
return res
继续阅读与本文标签相同的文章
-
人工智能社会实验研究全面展开
2026-05-18栏目: 教程
-
OpenAI机械手“学习”解开三阶魔方技术
2026-05-18栏目: 教程
-
5G时代,能给我们带来什么样的生活改观
2026-05-18栏目: 教程
-
第六届世界互联网大会将首次启用新展馆
2026-05-18栏目: 教程
-
世界首款在BCH区块链上运行的沙盒游戏——RealmX
2026-05-18栏目: 教程
