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

为了结果不重复,所以剪枝是必须要进行的操作