```
class Solution:
# @return a list of lists of length 3, [[val1,val2,val3]]
# 10:16
def __init__(self):
self.result = []
def threeSum(self, num):
num.sort()
last = None
for i in range(len(num)):
if num[i] is last:
continue
last = num[i]
sum = 0 - num[i]
twoSumResult = self.findTwoSum(num[i+1:], sum, num[i])
return sorted(self.result)
def findTwoSum(self, num, target, root):
valMap = {}
last = None
for n in num:
if n in valMap and [root, valMap[n], n] not in self.result:
self.result.append([root, valMap[n], n])
else:
valMap[target-n] = n
```