39. 組合總和
阿新 • • 發佈:2020-07-20
給定一個無重複元素的陣列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; } };