您的位置:首页 > 其它

leetcode - Combination Sum

2014-10-25 11:17 253 查看
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where
the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

All numbers (including target) will be positive integers.
Elements in a combination (a1, a2,
… , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤
… ≤ ak).
The solution set must not contain duplicate combinations.

For example, given candidate set
2,3,6,7
and target
7
,

A solution set is:

[7]


[2, 2, 3]


class Solution
{
public:
std::vector<std::vector<int> > combinationSum(std::vector<int> &candidates, int target)
{
std::sort(candidates.begin(), candidates.end());
dfs(candidates, 0,0, target);
return res;
}
private:
std::vector<int> path;
std::vector<std::vector<int>> res;
// start 从candidates开始的位置, sum当前的和,target目标值,path存放满足条件的值,res 存放所有结果
void dfs(std::vector<int> &candidates, int start, int sum, int target)
{
if(sum>target)//超出目标值,直接返回
return ;
if(sum == target)// 满足条件
{
res.push_back(path);
return ;
}
for(int i=start; i< candidates.size(); i++)
{
path.push_back(candidates[i]);
dfs(candidates, i, sum+candidates[i], target);
path.pop_back();
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: