先排序,然后夹逼
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int>> res;
res.clear();
sort(num.begin(),num.end());//排序
for(int i=0;i<num.size();i++){
if(num[i]==num[i-1]){//过滤重复
continue;
}
int j=i+1;
int k=num.size()-1;
while(j<k){//左右夹逼
if(j>i+1&&num[j]==num[j-1]){//过滤重复
j++;
continue;
}
if(k<num.size()-1&&num[k]==num[k+1]){//过滤重复
k--;
continue;
}
int sum=num[i]+num[j]+num[k];
if(sum<0){
j++;
}else if(sum>0){
k--;
}else{//加入vector
vector<int> tmp;
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
res.push_back(tmp);
j++;
}
}
}
return res;
}
};
参考: