四数之和 和三数之和相比仅仅多了一层循环。注意枚举前两个数的时候也要注意去重。
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> ans; if(nums.size()<4) return ans; sort(nums.begin(),nums.end()); int n = nums.size(); for(int i=0;i<n-3;i++){ if(i>0 && nums[i]==nums[i-1]) continue; for(int j=i+1;j<n-2;j++){ if(j>i+1 && nums[j]==nums[j-1]) continue; int t = target-nums[i]-nums[j]; int l = j+1, r = n-1; while(l<r){ if(l>j+1 && nums[l]==nums[l-1]){ l++; continue; } if(r<n-1 && nums[r]==nums[r+1]){ r--; continue; } int sum = nums[l]+nums[r]; if(sum<t){ l++; }else if(sum>t){ r--; }else{ ans.push_back({nums[i],nums[j],nums[l],nums[r]}); l++; r--; } } } } return ans; } };