利用双指针法。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int len = nums.size();
int i,j,k;
int con=0;
sort(nums.begin(),nums.end());
for(i=0;i<len;i++)
{
if(i>0&&nums[i]==nums[i-1]) //如果是num[i]==nums[i+1],那么三个0的情况会被跳过
continue;
if(nums[i]>0)
break;
j=i+1;
k=len-1;
while(j<k)//j代表左边,k代表右边
{
if(nums[i]+nums[j]+nums[k]>0)
{
k--;
}
else if(nums[i]+nums[j]+nums[k]<0)
{
j++;
}
else {
res.push_back({nums[i],nums[j],nums[k]});
k--;
j++;
//这两个while循环必须存在,将j,k两个数去重,且必须在里面,否则会漏掉有两个相同的数的结果。
while(j<k&&nums[k]==nums[k+1]){
k--;
}
while(j<k&&nums[j]==nums[j-1]){
j++;
}
}
}
}
return res;
}
};