先对数组排序,然后令i=k+1, j=n-1,对每一个k依次遍历i,j的值,考虑所有相同的情况。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if not nums: return []
nums = sorted(nums)
n = len(nums)
res = []
for k in range(n-2):
if nums[k] > 0:
break
if k != 0 and nums[k-1] == nums[k]:
continue
i, j = k+1, n-1
while i<j:
tmp = nums[i]+nums[j]+nums[k]
if tmp < 0:
i += 1
while i < j and nums[i-1]==nums[i]:
i += 1
elif tmp > 0:
j -= 1
while i < j and nums[j+1]==nums[j]:
j -= 1
else:
res.append([nums[k],nums[i],nums[j]])
i += 1
j -= 1
while i < j and nums[j+1]==nums[j]:
j -= 1
while i < j and nums[i-1]==nums[i]:
i += 1
return res