python:
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
nums.sort() #先对数组进行排序
for i in range(len(nums)-2):
if i > 0 and nums[i] == nums[i-1]:
#若当前元素与之前元素相同,不进行之后的操作,更新i=i+1
continue;
#先选中一个元素nums[i],再在之后寻找另外两个元素nums[l],nums[r]
l = i + 1
r = len(nums) - 1
while l < r:
s = nums[i] + nums[l] + nums[r]
if s < 0:
l += 1
elif s > 0:
r -= 1
else:
res.append((nums[i],nums[l],nums[r]))
while l < r and nums[l] == nums[l + 1]:
l += 1
while l < r and nums[r] == nums[r - 1]:
r -= 1
l += 1
r -= 1
return res
C++:
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > res;
int n = num.size();
sort(num.begin(), num.end());
for(int i = 0; i < n-2; i ++)
{
while(i > 0 && num[i] == num[i-1])
i ++;
int l = i + 1;
int r = n - 1;
while(l < r)
{
int sum = num[i] + num[l] + num[r];
if(sum == 0)
{
vector<int> cur(3);
cur[0] = num[i];
cur[1] = num[l];
cur[2] = num[r];
res.push_back(cur);
l ++;
r --;
while(l < r && num[l] == num[l-1])
l ++;
while(l > r && num[r] == num[r+1])
r --;
}
else if(sum < 0)
{
l ++;
}
else
{
r --;
}
}
}
return res;
}
};