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; } };