1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution: def threeSum(self, nums: list[int]) -> list[list[int]]: res = set() p, n, z = [], [], []
for num in nums: if num > 0: p.append(num) elif num < 0: n.append(num) else: z.append(num)
N, P = set(n), set(p)
if z: for num in N: if num*-1 in P: res.add((num, 0, num*-1)) if len(z) >= 3: res.add((0, 0, 0))
for i in range(len(n)): for j in range(i+1, len(n)): target = (n[i] + n[j]) * -1 if target in P: res.add( tuple( sorted( [n[i], n[j], target] )))
for i in range(len(p)): for j in range(i+1, len(p)): target = (p[i] + p[j]) * -1 if target in N: res.add(tuple(sorted([p[i], p[j], target])))
return list(res)
|