固定一个数,再双指针移动其余的数。每次移动时都要考虑与之前的是否重复,重复就跳过。这样最终的结果就不需要去重。
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: nums.sort() result = [] for i in range(0,len(nums)-1): if i!=0 and nums[i] == nums[i-1]: continue j,k=i+1,len(nums)-1 while j<k: triple_sum = nums[i] + nums[j] + nums[k] if triple_sum==0: res = [nums[i],nums[j], nums[k]] result.append(res) k-=1 while k>j and nums[k] == nums[k+1]: k-=1 j+=1 while j<k and nums[j] == nums[j-1]: j+=1 elif triple_sum>0: k-=1 while k>j and nums[k] == nums[k+1]: k-=1 else: j+=1 while j<k and nums[j] == nums[j-1]: j+=1 return result