固定一个数,再双指针移动其余的数。每次移动时都要考虑与之前的是否重复,重复就跳过。这样最终的结果就不需要去重。
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