class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> res;
if(nums.size()<=1) return res;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(i>0 && nums[i]==nums[i-1]) continue;
for(int j=i+1;j<nums.size();j++){
if(j>i+1 && nums[j]==nums[j-1]) continue;
int m = nums.size()-1;
for(int k=j+1;k<nums.size();k++){
if(k>j+1 && nums[k]==nums[k-1]) continue;
while(k<m && nums[i]+nums[j]+nums[k]+nums[m]>target) m--;
if(k==m) continue;
if(nums[i]+nums[j]+nums[k]+nums[m]==target)
res.push_back({nums[i],nums[j],nums[k],nums[m]});
}
}
}
return res;
}
};
与三个数求和思路差不多,a<b<c<d,然后通过判断前一个与当前相同与否来去重,前三个数依次确定,最后一个从后往前找,当求和小雨等于arget循环就没必要往前走了。