题目:
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ? b ? c ? d)
- The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
/*
在一个数组中找三个元素之和为0的所有组合
*/
void helper(vector<int>& vec,int index,int num,vector<int>& target)
{
if(index >= vec.size())
return ;
target.push_back(vec[index]);
num--;
if(num ==0)
{
int i=0;
int sum=0;
sum =accumulate(target.begin(),target.end(),sum);
if(sum == 0)
{
for(i=0;i<target.size();i++)
cout<<target[i]<<" ";
cout<<endl;
}
}
helper(vec,index+1,num,target);
target.pop_back();
num++;
helper(vec,index+1,num,target);
}
void ThreeSum(vector<int>& vec)
{
if(vec.size()==0)
return ;
vector<int> target;
helper(vec,0,4,target);
}
int main()
{
int array[]={1,0,-1,0,-2,2};
vector<int> vec(array,array+sizeof(array)/sizeof(int));
ThreeSum(vec);
return 0;
}