Combination Sum II 全排列求和無重複
阿新 • • 發佈:2019-01-31
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:
- All numbers (including target) will be positive integers.
- Elements in a combination (a1, a2,
… , a
- The solution set must not contain duplicate combinations.
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]
class Solution { public: vector<vector<int> > combinationSum2(vector<int> &num, int target) { //回溯法 sort(num.begin(),num.end()); vector< vector<int> > res; vector <int> path; solve(num,0,0,target,res,path); return res; } void solve( vector<int> candidates,int index,int sum,int target, vector< vector<int> > &res, vector<int> &path) { if(sum>target) return ; if(sum==target) { res.push_back(path); return ; } for(int i=index;i<candidates.size();i++) { sum+=candidates[i]; path.push_back(candidates[i]); solve(candidates,i+1,sum,target,res,path); path.pop_back(); sum-=candidates[i]; while(i<candidates.size()-1 && candidates[i]==candidates[i+1])i++; } } };