【leetcode 回溯dfs C++】39. Combination Sum

39. Combination Sum

在这里插入图片描述

class Solution {
    
    
public:
    vector<vector<int>> ans;
    void dfs(vector<int>& candidates, vector<int>& V, int now, int target) {
    
    
        if(target == 0) {
    
    
            ans.push_back(V);
            return ;
        }
        for(int ii = now; ii < candidates.size() && target >= candidates[ii]; ii++) {
    
    
            V.push_back(candidates[ii]);
            dfs(candidates, V, ii, target - candidates[ii]);
            V.pop_back();
        }
    }
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
    
    
        sort(candidates.begin(), candidates.end());
        vector<int> V;
        dfs(candidates, V, 0, target);
        return ans;
    }
};

在这里插入图片描述

class Solution {
    
    
public:
    vector<vector<int>> ans;
    void dfs(vector<int>& candidates, vector<int> V, int sum, int now, int target) {
    
    
        while(sum + candidates[now] <= target) {
    
    
            sum += candidates[now];
            V.push_back(candidates[now]);
            if(sum == target) {
    
    
                ans.push_back(V);
                return ;
            }
            for(int ii = now + 1; ii < candidates.size(); ii++) {
    
    
                dfs(candidates, V, sum, ii, target);
            }
        }
    }
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
    
    
        vector<int> V;
        for(int ii = 0; ii < candidates.size(); ii++) {
    
    
            dfs(candidates, V, 0, ii, target);
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37454852/article/details/114315908