题目要求:Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
For example, given candidate set 10,1,2,7,6,1,5
and target 8
,
A solution set is: [1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
分析:
Combination Sum 里面的元素可以无限次使用,但是Combination Sum II每个元素只能使用一次。
代码如下:
class Solution { public: vector<vector<int> > combinationSum2(vector<int> &candidates, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function sort(candidates.begin(), candidates.end()); set<vector<int> > ans; vector<int> record; searchAns(ans, record, candidates, target, 0); vector<vector<int> > temp; for (set<vector<int> >::iterator it = ans.begin(); it != ans.end(); it++) { temp.push_back(*it); } return temp; } private: void searchAns(set<vector<int> > &ans, vector<int> &record, vector<int> &candidates, int target, int idx) { if (target == 0) { ans.insert(record); return; } if (idx == candidates.size() || candidates[idx] > target) { return; } for (int i = 1; i >= 0; i--) { record.push_back(candidates[idx]); } for (int i = 1; i >= 0; i--) { record.pop_back(); searchAns(ans, record, candidates, target - i * candidates[idx], idx + 1); } } };