描述
给出一组候选数C和一个目标数T,找出候选数中加起来和等于T的所有组合。
C中的数字在组合中可以被无限次使用
注意:
- 题目中所有的数字(包括目标数T)都是正整数
- 你给出的组合中的数字 (a 1, a 2, … , a k) 要按非递减排序 (ie, a 1 ≤ a 2 ≤ … ≤ a k).
- 结解集中不能包含重复的组合
例如:给定的候选数集是[20,30,60,70],目标数是7
解集是:
[70]
[20, 20, 30]
class Solution {
vector<int> d;
vector<vector<int> > z;
public:
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
sort(candidates.begin(),candidates.end());
dfs(candidates,0,target,0);
return z;
}
void dfs(vector<int> &candidates,int x,int t,int step)
{
if(x>t||x<0) return ;
if(x==t){z.push_back(d);}
else
{
int i;
for(i=step;i<candidates.size();i++)
{
d.push_back(candidates[i]);
dfs(candidates,x+candidates[i],t,i);
d.pop_back();
}
}
}
};
该博客介绍了如何使用深度优先搜索(DFS)解决在给定候选数集中找到所有加起来等于目标数的组合问题。示例中,候选数集为[20,30,60,70],目标数为70,解集包括[70]和[20,20,30]。算法首先对候选数进行排序,然后通过递归遍历组合可能,确保结果的非递减排序和不重复性。
1625

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



