看了题解才会的,过段时间复盘吧
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
answer=list()
nums.sort()
length=len(nums)
#第一层循环第一个数
for i in range(0,length):
if i>0 and nums[i]==nums[i-1]:
continue
k=length-1
target=-nums[i]#要相加为0,后续的数之和为-num[i]
#相当于固定第一个数,后两个数用双指针找
for j in range(i+1,length):
#因为已经排序了,重复的数一定在一起,只要保证相同的数在一层循环里不会取两次就行
if j>i+1 and nums[j]==nums[j-1]:
continue
while j<k and nums[j]+nums[k]>target:#证明和大了,我们就要缩小
k-=1
if j==k:#如果两指针相遇了,那么就改变第一个数
break
if(nums[j]+nums[k]==target):
answer.append([nums[i],nums[j],nums[k]])
return answer