class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型vector
* @return int整型vector<vector<>>
*/
vector<vector<int> > threeSum(vector<int>& num) {
// write code here
// vector<vector<int> > res;
// if(num.size()<3) return res;
// sort(num.begin(),num.end());//升序排列
// for(int i=0;i<num.size()-2;i++){
// if(i!=0 && num[i]==num[i-1]) continue;
// for(int j=i+1;j<num.size()-1;j++){
// if(j>i+1 && num[j]==num[j-1]) continue;
// for(int z=j+1;z<num.size();z++){
// if(z>j+1 && num[z]==num[z-1]) continue;
// if(num[i]+num[j]+num[z] == 0) res.push_back({num[i],num[j],num[z]});
// }
// }
// }
// return res;
vector<vector<int> > res;
if(num.size()<3) return res;
sort(num.begin(),num.end());//升序排列
for(int i=0;i<num.size()-2;i++){
if(i!=0 && num[i]==num[i-1]) continue;
int l =i+1,r = num.size()-1;
while(l<r){
int temp = num[i]+num[l]+num[r];
if(temp>0) { r--;}
else if(temp<0) {l++;}
else{
res.push_back({num[i],num[l],num[r]});
while(num[l]==num[l+1] && l+1<r) l++;
while(num[r]==num[r-1] && r-1>l) r--;
l++;
r--;}
}
}
return res;
}
};