LeetCode 中级 - 组合总和(105)
给定一个无重复元素的数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的数字可以无限制重复被选取。
说明:
- 所有数字(包括
target
)都是正整数。 - 解集不能包含重复的组合。
示例 1:
输入: candidates =[2,3,6,7],
target =7
, 所求解集为: [ [7], [2,2,3] ]
思路: 深度优先搜索
class Solution { public: void dfs(vector<int> candidates,int start,int target,vector<int> item,vector<vector<int> > &res) { if(target<0) return ; if(target==0) { res.push_back(item); return ; } for(int i=start;i<candidates.size();i++) { item.push_back(candidates[i]); dfs(candidates,i,target-candidates[i],item,res);//注意参数i,可以选择重复元素而又可以保证不会发生重复(i一直是递增的) item.pop_back(); } } vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int> > res; vector<int> item; // item保存当前dfs的解空间 // res保存所有满足条件的解 dfs(candidates,0,target,item,res); return res; } };