leetcode39——Combination Sum

题目大意:在给出的数组中找出数字的组合(数字允许重复使用,找出的组合不能重复),使得他们相加得到目标数字

分析:dfs。dfs层层搜索记录路径即可。

代码:转载自https://blog.csdn.net/u012501459/article/details/46779021

class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> result;
vector<int> path;
sort(candidates.begin(), candidates.end());
helper(candidates, 0, 0, target, path, result);
return result;
}
void helper(vector<int> &nums, int pos, int base, int target, vector<int>& path, vector<vector<int>> & result) {
if (base == target) {  //找到一个答案
result.push_back(path);
return;
}
if (base>target)  //直接剪枝
return; 
for (int i = pos;i<nums.size();i++)  //当前位置可选数字为nums[pos]~nums[size-1],dfs
{
path.push_back(nums[i]);
helper(nums, i, base + nums[i], target, path, result);
path.pop_back();
}
}
};

阅读更多
个人分类: 搜索
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

leetcode39——Combination Sum

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭