135. 数字组合
注意:1.可以重复使用一个数字(每次搜索还可以从当前位置开始) 2.但是不能重复(上来先要排序去重)
combination.push_back()之后记得要pop_back()。
class Solution {
public:
vector<vector<int>> combinationSum(vector<int> &candidates, int target) {
vector<vector<int>> res;
if (candidates.size()==0) return res;
sort(candidates.begin(), candidates.end());
remove_duplicate(candidates);
vector<int> combination;
helper(candidates,0,target,combination,res);
return res;
}
void remove_duplicate(vector<int> &candidates) {
int i=0;
while (i<candidates.size()) {
int j=i+1;
while (j<candidates.size() && candidates[j]==candidates[i]) candidates.erase(candidates.begin()+j);
i=j;
}
}
void helper(vector<int> &candidates,int index,int target,
vector<int> &combination,
vector<vector<int>> &res) {
if (target==0) {res.push_back(combination);return;}
for (int i=index;i<candidates.size();i++) {
if (target-candidates[i]<0) continue;
combination.push_back(candidates[i]);
helper(candidates,i,target-candidates[i],combination,res);
combination.pop_back();
}
}
};
153. 数字组合 II
不可以多次使用一个数字,数组中又有重复数字的,使用 if (i!=index && num[i]==num[i-1]) continue;
class Solution {
public:
vector<vector<int>> combinationSum2(vector<int> &num, int target) {
vector<vector<int>> res;
if (num.size()==0) return res;
sort(num.begin(),num.end());
vector<int> combination;
helper