leetcode#39. Combination Sum
给定一个无重复元素的数组 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] ]
class Solution { public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int>> result; vector<int> before; combinationSum(result,candidates,target,before); for(auto &elem:result) sort(elem.begin(),elem.end()); sort(result.begin(),result.end()); result.erase(unique(result.begin(),result.end()),result.end()); return result; } //准备一个vector,依次放入元素,然后dfs void combinationSum(vector<vector<int>>& result,vector<int>& nums, int target,vector<int>& before) { for(int i=0;i!=nums.size();++i) { if(nums[i]<target) { before.push_back(nums[i]); combinationSum(result,nums,target-nums[i],before); before.pop_back(); } if(nums[i]==target) { before.push_back(nums[i]); result.push_back(before); before.pop_back(); //break; } else //no need continue; } } };