题目:
解答:
借用39题的解法,将while改为if做循环,并对第一个递归式做去重即可。
代码:
class Solution {
public:
void findCompare(vector<int>& candidates,
vector<vector<int>>& result,
vector<int>& tmp,
int sum,
int index,
int index2,
int len,
int target){
int num = candidates[index];
if(index == len || num > target - sum) return;
int tmpindex = index;
while(candidates[tmpindex] == candidates[tmpindex+1]) ++tmpindex;
findCompare(candidates, result, tmp, sum, tmpindex + 1, index2, len, target);
if(num <= target - sum){
tmp[index2++] = num;
sum += num;
if(sum == target){
vector<int> vec(tmp.begin(), tmp.begin() + index2);
result.push_back(vec);
}
findCompare(candidates, result, tmp, sum, index + 1, index2, len, target);
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
int len = candidates.size();
sort(candidates.begin(), candidates.end());
vector<vector<int>> result;
vector<int> tmp(1000, 0);
findCompare(candidates, result, tmp, 0, 0, 0, len, target);
return result;
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)