LeetCode 40. 组合总和 II

发布时间 2023-06-07 20:50:55作者: 穿过雾的阴霾
class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        dfs(candidates,0,target);
        return res;
    }
    vector<int> path;
    void dfs(vector<int>& candidates, int u,int target)//枚举每个数选或不选
    {
        if(u>=candidates.size()||target<=0)
        {
            if(!target) res.push_back(path);
            return;
        }
        path.push_back(candidates[u]);
        dfs(candidates,u+1,target-candidates[u]);
        path.pop_back();
        //不选
        int idx=u;
        while(idx<candidates.size()&&candidates[idx]==candidates[u])   idx++;
        dfs(candidates,idx,target);
    }
};