1. 程式人生 > 實用技巧 >39. 組合總和

39. 組合總和

給定一個無重複元素的陣列candidates和一個目標數target,找出candidates中所有可以使數字和為target的組合。

candidates中的數字可以無限制重複被選取。

說明:

所有數字(包括target)都是正整數。
解集不能包含重複的組合。
示例1:

輸入:candidates = [2,3,6,7], target = 7,
所求解集為:
[
[7],
[2,2,3]
]
示例2:

輸入:candidates = [2,3,5], target = 8,
所求解集為:
[
[2,2,2,2],
[2,3,3],
[3,5]
]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/combination-sum

著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {
public:
    void dfs(vector<int>& candidates,int target,vector<int>& cur,vector<vector<int>>& res)
    {
        if(target<0)return;
        if(target==0)
        {
            res.push_back(cur);
            
return; } for(int i=0;i<candidates.size()&&candidates[i]<=target;i++) { //如果當前選中的比上一個選中的要小 則剪枝 if(cur.size()&&candidates[i]<cur.back())continue; cur.push_back(candidates[i]); dfs(candidates,target-candidates[i],cur,res); cur.pop_back(); } } vector
<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); vector<vector<int>> res; vector<int> cur; dfs(candidates,target,cur,res); return res; } };