class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
if(nums.size() < 3){
return {};
}
vector<vector<int>> result;
vector<int> sum3;
sort(nums.begin(), nums.end());
int temp, sum2;
for(int i=0; i<nums.size()-2; i++){
if(nums[i] == nums[i-1] && i > 0){
continue;
}
temp = 0 - nums[i];
int left = i + 1;
int right = nums.size() - 1;
while(left < right ){
sum2 = nums[left] + nums[right];
if(sum2 == temp){
sum3.push_back(nums[i]);
sum3.push_back(nums[left]);
sum3.push_back(nums[right]);
result.push_back(sum3);
sum3.clear();
}
sum2 < temp ? left++ : right--;
while(nums[left] == nums[left-1] && left > i+1){
left++;
}
while(nums[right] == nums[right+1] && right < nums.size()-1){
right--;
}
}
}
return result;
}
};
难点在于不能有重复的组合出现,因此需要在i、left、right做了加减操作后判断值是否重复。