class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
n=len(nums)
ans=[]
for i in range(0,n-2):
if nums[i]>0: break
if i>0 and nums[i]==nums[i-1]:continue
j=i+1
k=n-1
while j<k:
if nums[i]+nums[j]+nums[k]==0:
ans.append([nums[i],nums[j],nums[k]])
while j<n-1 and nums[j]==nums[j+1]:j+=1
while k>j and nums[k]==nums[k-1]:k-=1
j+=1
k-=1
elif nums[i]+nums[j]+nums[k]<0:
j+=1
else:
k-=1
return ans
代码思路:
- 对n维数组nums排序
- 固定某一数i,若nums[i]与nums[i-1]相等,则i加1,直至两者不相等
- 在i的右侧设置两指针j和k,初始位置分别为i+1与n-1
- 计算i,j,k三指针在数组中相应元素之和若小于0则右移j,若大于0则左移k,若等于0,记录结果元素,排除j和k两指针相等元素后,两指针向中移动,重复该步骤,直至j>=k
- 令i遍历数组中所有元素,返回结果