调用三数之和的函数
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums,int target,int first) {
vector<vector<int>> res;
for(int i=0;i<nums.size()-2;i++){
if(i>0&&nums[i]==nums[i-1]) continue;
int a=nums[i];
int left=i+1;
int right=nums.size()-1;
while(left<right){
if((long) a+(long) nums[left]+(long) nums[right]==(long)target){
vector<int> new_res;
new_res.push_back(first);
new_res.push_back(a);
new_res.push_back(nums[left]);
new_res.push_back(nums[right]);
res.push_back(new_res);
if(right-left<=2) break;
else{
while(left<right&&nums[left]==nums[left+1]) left++;
while(right>left&&nums[right]==nums[right-1]) right--;
left++;
right--;
}
}
else if((long) a<(long) target-(long) nums[right]-(long)nums[left]){
while(left<right&&nums[left]==nums[left+1]) left++;
left++;
}
else{
while(right>left&&nums[right]==nums[right-1]) right--;
right--;
}
}
}
return res;
}
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(), nums.end(),less<int>());
vector<vector<int>> res;
if(nums.size()<4) return res;
for(int i=0;i<nums.size()-3;i++){
if(i>0&&nums[i]==nums[i-1]) continue;
vector<int> tmp;
tmp.assign(nums.begin()+i+1,nums.end());
vector<vector<int>> threeSum_res=threeSum(tmp,target-nums[i],nums[i]);
for(int j=0;j<threeSum_res.size();j++){
res.push_back(threeSum_res[j]);
}
}
return res;
}
};