题目链接:
https://leetcode.com/problems/4sum/description/
题解:
在这之前,我们已经解决过了3Sum这个问题,那么,4Sum其实就是在3Sum的基础上,多加了一个。因此,我们可以这么去做,原本对于3Sum,我们只是先确定了一个,那么,我们可以先确定两个。其他地方的处理方法跟3Sum没什么区别。
代码:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
set<vector<int> >res;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++)
{
for(int j=i+1;j<nums.size();j++)
{
int left=j+1,right=nums.size()-1;
int x=nums[i]+nums[j];
while(left<right)
{
int y=nums[left]+nums[right];
if(x+y==target)
{
res.insert({nums[i],nums[j],nums[left],nums[right]});
while(left<right&&nums[left]==nums[left+1])
left++;
while(left<right&&nums[right]==nums[right-1])
right--;
left++;
right--;
}
else if(x+y>target)
right--;
else
left++;
}
}
}
return vector<vector<int> >(res.begin(),res.end());
}
};