# [Three Sum](https://leetcode.com/problems/3sum/solution/)
###### tags: `Leetcode`, `Medium`, `Two Pointers`
## Approach
* Sort the input list in ascending order and initialize a result list
* Iterate through the list
* If current value is same as value at previous index; continue
* Initialize left and right to `index + 1` and `len(nums) - 1`
* If the sum of current number, `nums[left]` and `nums[right]` is equal to 0, add the three numbers to result array, increment left by 1
* if `nums[left]` == `nums[left - 1]` then increment left by 1
* If sum < 0; increment left by 1
* If sum > 0; decrement right by 1
* Return result
## Asymptotic Analysis
### Time Complexity: **O(N<sup>2</sup>)**
### Space Complexity: **O(N)**
## Code
``` python
from typing import List
class ThreeSum:
@staticmethod
def threeSum(nums: List[int]) -> List[List[int]]:
nums.sort()
result = []
for index, number in enumerate(nums):
if index > 0 and number == nums[index - 1]:
continue
left, right = index + 1, len(nums) - 1
while left < right:
sum = number + nums[left] + nums[right]
if sum > 0:
right -= 1
elif sum < 0:
left += 1
else:
result.append([number, nums[left], nums[right]])
left += 1
while left < right and nums[left] == nums[left - 1]:
left += 1
return result
numbers = [-1,0,1,2,-1,-4]
print(ThreeSum.threeSum(numbers))
```