코테준비 - Combination Sum II

정상화·2023년 2월 26일

LeetCode

목록 보기
38/222

Combination Sum II

class Solution {
private:
    set<vector<int>> combinations;
    vector<vector<int>> result;
public:
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        std::sort(candidates.begin(), candidates.end());
        vector<int> temp;
        for (unsigned i = 0; i < candidates.size(); i++) {
            dfs(candidates, target, i, temp);
        }
        for (auto& v:combinations) {
            result.push_back(v);
        }
        return result;
    }

    void dfs(vector<int>& candidates, int sum, int current, vector<int> temp){
        sum -= candidates.at(current);
        temp.push_back(candidates.at(current));

        if (sum == 0){
            combinations.insert(temp);
            return;
        } else if (sum < 0) {
            return;
        }

        for (unsigned i = current+1; i < candidates.size(); i++) {
            dfs(candidates, sum, i, temp);
            while (i + 1 < candidates.size() && candidates.at(i) == candidates.at(i + 1)) {
                i++;
            }
        }
    }

    void clear(){
        combinations.clear();
        result.clear();
    }
};
profile
백엔드 희망

0개의 댓글