与15、三数之和,16、最接近的三数之和思想类似,在三数之和外再套一层for循环。
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int len=nums.size();
sort(nums.begin(),nums.end());
vector<vector<int>> res;
for(int i=0;i<len-3;i++){
int temp=target-nums[i];
if(i!=0&&(nums[i]==nums[i-1])){
continue;
}
for(int j=i+1;j<len-2;j++){
if(j!=i+1&&(nums[j]==nums[j-1])){
continue;
}
int left=j+1;
int right=len-1;
while(left<right){
int sum=nums[j]+nums[left]+nums[right];
if(sum==temp){
while(left<right&&(nums[left]==nums[left+1])){
left++;
}
while(left<right&&(nums[right]==nums[right-1])){
right--;
}
res.push_back({nums[i],nums[j],nums[left],nums[right]});
left++;
right--;
}
else if(sum<temp){
left++;
}
else if(sum>temp){
right--;
}
}
}
}
return res;
}
};