注意当有四个时,其实第一个和第二个性质等于三个数和时的第一个。
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> res; int i,j,k,l; if(nums.size()<4) return res; sort(nums.begin(),nums.end()); for( i=0;i<nums.size()-3;i++) { if(i>0 &&nums[i]==nums[i-1]) continue; for(j=i+1;j<nums.size()-2;j++) { if(j>i+1 &&nums[j]==nums[j-1]) continue; k=j+1; l=nums.size()-1; while(k<l) { while(k<l &&nums[i]+nums[j]+nums[k]+nums[l]<target) k++; while(k<l &&nums[i]+nums[j]+nums[k]+nums[l]>target) l--; if(k<l &&nums[i]+nums[j]+nums[k]+nums[l]==target) { vector<int>tmp; tmp.push_back(nums[i]); tmp.push_back(nums[j]); tmp.push_back(nums[k]); tmp.push_back(nums[l]); res.push_back(tmp); k++; while(nums[k]==nums[k-1]&&k<l) k++; l--; while(nums[l]==nums[l+1]&&k<l) l--; } } } } return res; } };