给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

示例:

输入:

nums = [-1, 0, 1, 2, -1, -4]  

输出:

[  
 [-1, 0, 1],  
 [-1, -1, 2]   
]  

解答:

def threeSum(self, nums):
    sortednums = sorted(nums)
    if len(nums) < 3 : return []
    if sortednums[0] > 0 or sortednums[-1]< 0 : return []
    if sortednums[0] == sortednums[-1] == 0 : return [[0,0,0]]
    res = []
    i=0
    while i < len(sortednums)-2:
        j,k = i+1,len(sortednums)-1
        while j < k:
            sum = sortednums[j] + sortednums[k]
            if sum > -sortednums[i]:
                k-=1
            elif sum < -sortednums[i]:
                j+=1
            else:
                res.append([sortednums[i], sortednums[j], sortednums[k]])
                tempj = sortednums[j]
                while j < k and sortednums[j] == tempj: #j避免重复
                    j+=1
                tempk = sortednums[k]
                while j < k and sortednums[k] == tempk: #k避免重复
                    k-=1
        tempi = sortednums[i]
        while i < len(sortednums)-2 and sortednums[i] == tempi : #i避免重复
            i += 1
    return res