#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
private:
vector<vector<int>> ans;
vector<int> path;
public:
void backtracking(vector<int>& candidates, vector<bool>& used, int target, int sum, int startIndex){
if (sum==target){
ans.push_back(path);
}
for(int i=startIndex; i<candidates.size() && sum+candidates[i]<=target; i++){
if (i > 0 && candidates[i] == candidates[i - 1] && used[i - 1] == false) {
continue;
}
sum+=candidates[i];
path.push_back(candidates[i]);
used[i] = true;
backtracking(candidates, used, target, sum, i+1);
used[i] = false;
sum-=candidates[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
int l=candidates.size();
if (l==0) return {};
vector<bool> used(candidates.size(), false);
sort(candidates.begin(), candidates.end());
backtracking(candidates, used, target, 0, 0);
return ans;
}
};
int main(){
vector<int> candidates={10,1,2,7,6,1,5};
int target=8;
Solution S;
vector<vector<int>> ans=S.combinationSum2(candidates, target);
for (int i=0; i<ans.size();i++){
cout<<"[";
for (int j=0; j<ans[i].size(); j++){
cout<<ans[i][j]<<",";
}
cout<<"]"<<endl;
}
return 0;
}
结果:
[1,1,6,]
[1,2,5,]
[1,7,]
[2,6,]
Leetcode40. 组合总和 II--回溯算法
最新推荐文章于 2024-08-10 17:23:40 发布