首页 > 代码库 > 39. Combination Sum

39. Combination Sum

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

 

For example, given candidate set [2, 3, 6, 7] and target 7
A solution set is: 

[  [7],  [2, 2, 3]]
采用深度优先搜索的思想,对于输入candidates=[1,2] ,target=3,遍历的方向如图: 

技术分享

 1 #include "stdafx.h" 2  3 #include <iostream> 4 #include <vector> 5 #include <algorithm> 6  7 using namespace std; 8 void helper(int pos, int base, int target, vector<int>& candidates, vector<int>& path, vector<vector<int> >& result) 9 {10     if (base > target)11         return;12     if (base == target)13     {14         result.push_back(path);15         return;16     }17     for (int i = pos; i < candidates.size(); ++i)18     {19         path.push_back(candidates[i]);20         helper(i, base + candidates[i], target, candidates, path, result);21         path.pop_back();22     }23 24 }25 vector<vector<int> > combinationSum(vector<int>& candidates, int target)26 {27     vector<vector<int> > result;28     vector<int> path;29     sort(candidates.begin(), candidates.end());30     vector<int>::iterator it = unique(candidates.begin(),candidates.end());31     candidates.erase(it, candidates.end());32     helper(0, 0, target, candidates, path, result);33     return result;34 }35 int main()36 {37     vector<vector<int> > result;38     vector<int> candidates;39     candidates.push_back(2);40     candidates.push_back(2);41     candidates.push_back(3);42     candidates.push_back(7);43     int target = 7;44     result = combinationSum(candidates, target);45 46     return 0;47 }

 

39. Combination Sum