class Solution {
public:
vector<vector<int>> res;
/*
* 判断某个值是否在search集合中
*/
bool contains(vector<int> &search, int& n){
for(int i=0;i<search.size();i++){
if(search[i] == n){
search.push_back(n);
return true;
}
}
return false;
}
void getAns(vector<int> &num,vector<bool> &visited, vector<int> &path, int curSum, const int& target){
if(curSum > target) return;
if(curSum == target){
res.push_back(path);
} else {
vector<int> search;
for(int i=0;i<num.size();i++){
if(!visited[i] && !contains(search, num[i]) &&(path.size()==0 || path[path.size()-1]<=num[i])){
// 剪枝
visited[i] = true;
path.push_back(num[i]);
getAns(num, visited, path, curSum + num[i], target);
path.pop_back();
visited[i] = false;
}
}
}
}
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
vector<bool> visited(num.size());
vector<int> path;
sort(num.begin(), num.end());
getAns(num, visited, path, 0, target);
return res;
}
};
Add up and the combination of the target value - Niuke.com
Guess you like
Origin blog.csdn.net/weixin_40315481/article/details/108658445
Ranking