思路:固定第一个数,双指针求答案,其中跳过重复的。
class Solution {
public:
vector<int> num;
int l;
vector<vector<int>> an;
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
num = nums;
l = nums.size();
for(int i = 0; i < l; i++){
if(i != 0 && num[i] == num[i-1]){
continue;
}
findAn(i, i + 1, l - 1);
}
return an;
}
void findAn(int index, int start,int end){
int needAn = num[index] * -1;
int s = start;
int e = end;
while(s < e){
if(s != start && num[s] == num[s-1]){
s++;
continue;
}
if(e != end && num[e] == num[e+1]){
e--;
continue;
}
if(num[e] + num[s] == needAn){
vector<int> an1;
an1.push_back(num[index]);
an1.push_back(num[s]);
an1.push_back(num[e]);
an.push_back(an1);
s++;
}else if(num[e] + num[s] > needAn){
e--;
}else{
s++;
}
}
}
};