您的位置:首页 > 其它

40. Combination Sum II LeetCode

2016-03-15 23:34 447 查看
题意:给出一个数组,和target,求所有不重复的这样的组合,从数组从取一些数加和等于target,数组的每个数只能用一次,可能有重复元素。

题解:我先对数组排个序然后dfs,然后为了不产生重复的集合,还是那个技巧,当i是for的后面的元素的时候,如果和之前的重复,那么就跳过这个元素,知道不与之前相同为止,这样就可以使得集合不重复。

class Solution {
public:
void dfs(vector<vector<int>>& ans, vector<int>& pre, vector<int>& candidates, int target, int k, int sum)
{
if(sum == target) ans.push_back(pre);
if(sum >= target) return;
for(int i = k; i < candidates.size(); i++)
{
if(i != k && candidates[i] == candidates[i - 1]) continue;
pre.push_back(candidates[i]);
dfs(ans,pre,candidates,target,i + 1,sum + candidates[i]);
pre.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<vector<int>> ans;
vector<int> pre;
ans.clear();
pre.clear();
dfs(ans,pre,candidates,target,0,0);
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode