40.组合总和II
class Solution {
public:
vector<vector<int>>res;
vector<int>cur;vector<int>candidates;
int s=0,t;
void bt(int start){
if(s>=t){if(s==t)res.push_back(cur);return;}
for(int j=start;j<candidates.size();j++){
int i=candidates[j];
if(j>start&&candidates[j]==candidates[j-1])continue;
cur.push_back(i);s+=i;
bt(j+1);
cur.pop_back();s-=i;
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
t=target;sort(candidates.begin(),candidates.end());this->candidates=candidates;bt(0);return res;
}
};
if(j>start&&candidates[j]==candidates[j-1])continue;
这而想了很久,一直以为是j大于0
为了结果不重复,所以剪枝是必须要进行的操作