题意:
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)
思路:该题做法可以仿照3Sum的做法。这里是先依次固定一个数字,然后按照3Sum的做法来做。
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<int> num(nums);
sort(num.begin(),num.end());
vector<vector<int> > result;
set<vector<int> > res;
if(num.size()<4) return result;
//先固定数组中的一个数字,注意数字的范围是[0,num.size()-3),因为这里要以一个固定的数字为基础随后进行3Sum的操作。
for(int i=0;i<num.size()-3;i++)
{
if(i&&num[i]==num[i-1]) continue;
//在固定数字之后的范围里进行3Sum的操作
for(int j=i+1;j<num.size()-2;j++)
{
if(j>i+1&&num[j]==num[j-1]) continue;
int p=j+1;
int q=num.size()-1;
while(p<q)
{
int n=num[i]+num[j]+num[p]+num[q];
if(n==target)
{
vector<int> vec{num[i],num[j],num[p],num[q]};
sort(vec.begin(),vec.end());
res.insert(vec);
p++;
q--;
}
else if(n<target) p++;
else q--;
}
}
}
result=vector<vector<int> >(res.begin(),res.end());
return result;
}
};