Ejemplo n.º 1
0
 void combinationSumHelper(vector<int> &num, int target, int i, vector<int> combination, vector<vector<int> > &result) {
     if (target < 0) return;
     if (target == 0) {
             if (find(result.begin(), result.end(), combination) == result.end())
                 result.push_back(combination);
         return;
     }
     if (i == num.size()) return;
     
     combinationSumHelper(num, target, i + 1, combination, result); 
     if ( num[i] <= target ) {
         combination.push_back(num[i]);
         combinationSumHelper(num, target - num[i], i + 1, combination, result);
     }
     
 };
Ejemplo n.º 2
0
 vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
     N = candidates.size();
     int buf[N];
     for (int i = 0; i < N; i++) buf[i] = 0;
     combinationSumHelper(0, target, candidates, buf);
     sort(ret.begin(), ret.end());
     return ret;
 }
Ejemplo n.º 3
0
 vector<vector<int> > combinationSum2(vector<int> &num, int target) {
     vector<vector<int> > result;
     sort(num.begin(), num.end());
     if (num[0] > target) return result;
     vector<int> combination;
     combinationSumHelper(num, target, 0, combination, result);
     return result;
 };
Ejemplo n.º 4
0
 vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
     
 
     vector<vector<int>> v;
     vector<int> l;
     
     sort(candidates.begin(), candidates.end());
     
     combinationSumHelper(&v, &l, &candidates, 0, target, 0);
     return v;
 }
vector<vector<int>> SubSetTest::combinationSum( vector<int> num, int target )
{
	vector<vector<int>> rst;
	if (num.size() == 0)
	{
		return rst;
	}
	vector<int> path;
    sort(num.begin(), num.end(), less<int>());
	combinationSumHelper(num, target, path, 0, rst);
	return rst;
}
Ejemplo n.º 6
0
 void combinationSumHelper(vector<vector<int>> * v, vector<int> * l, vector<int> * candidates, int sum, int target, int i) {
     if (sum == target && l->size() > 0) {
         v->push_back(*l);
         return;
     }
     
     if (sum > target) {
         return;
     }
     
     for (int j = i; j < candidates->size(); j++) {
         l->push_back( (*candidates)[j] );
         combinationSumHelper(v, l, candidates, sum + (*candidates)[j], target, j);
         l->pop_back();
     }
 }
Ejemplo n.º 7
0
 void combinationSumHelper(int pos, int remain, vector<int> &candidates, int buf[]) {
     if (remain == 0) {
         vector <int> tmp;
         for (int i = 0; i < pos; i++) {
             for (int j = 0; j < buf[i]; j++) {
                 tmp.push_back(candidates[i]);
             }
         }
         sort(tmp.begin(), tmp.end());
         ret.push_back(tmp);
         return;
     }
     if (pos == N)   return;
     for (int i = 0; i <= remain / candidates[pos]; i++) {
         buf[pos] = i;
         combinationSumHelper(pos + 1, remain - i * candidates[pos], candidates, buf);
     }
     buf[pos] = 0;
 }
void SubSetTest::combinationSumHelper( vector<int> num, int target, vector<int> path, int pos, vector<vector<int>>& rst )
{
	if (target == 0)
	{
		rst.push_back(path);
		return;
	}
	int prev = -1;
	for (int i = pos; i < num.size(); i++) {
		if (num[i] > target) {
			break;
		}

		if (prev != -1 && prev == num[i]) {
			continue;
		}

		path.push_back(num[i]);
		combinationSumHelper(num, target - num[i], path, i, rst);
		path.pop_back();

		prev = num[i];
	}
}