3Sum
Description:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Example
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is:
(-1, 0, 1)
(-1, -1, 2)
Code:
class Solution:
"""
@param numbers: Give an array numbers of n integer
@return: Find all unique triplets in the array which gives the sum of zero.
"""
def threeSum(self, numbers):
# write your code here
numbers = sorted(numbers)
res = []
for i in range(len(numbers)-2):
if numbers[i]>0:
break
if numbers[i] == numbers[i-1]:
continue
ans = self.twoSum(numbers[i+1:], -numbers[i])
if ans:
for j in range(len(ans)):
res.append([numbers[i]]+ans[j])
return res
def twoSum(self, numbers, target):
hashMap = {}
res = []
for i in range(len(numbers)):
secondPara = target-numbers[i]
if i+1<len(numbers) and numbers[i]==numbers[i+1]:
hashMap[numbers[i]] = 1
continue
if secondPara in hashMap:
res.append([secondPara, numbers[i]])
hashMap[numbers[i]] = 1
return res