给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
class Solution {
public:
/**
* @param numbers: Give an array numbers of n integer
* @return: Find all unique triplets in the array which gives the sum of zero.
*/
vector<vector<int>> threeSum(vector<int> &numbers) {
// write your code here
vector<vector<int>> result;
int i=0,j=0,k=0;
int size = numbers.size();
if (size < 3){
return result;
}
sort(numbers.begin(), numbers.end());
for(k = 0; k < size - 2 ;k++ ){
if(k > 0 && numbers[k]==numbers[k-1]) {
continue;
}
for(i = k+1,j = size-1;i<j;){
if(i > k+1 && numbers[i]==numbers[i-1]) {
i++;
continue;
}
if(j<size-1 && numbers[j]==numbers[j+1]) {
j--;
continue;
}
int sum = numbers[i] + numbers[j] + numbers[k];
if(sum == 0) {
vector<int> temp;
temp.push_back(numbers[k]);
temp.push_back(numbers[i]);
temp.push_back(numbers[j]);
result.push_back(temp);
i++;
j--;
}else if(sum >0) {
j--;
}else {
i++;
}
}
}
return result;
}
};