# 三数之和
给你一个包含 n
个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0
且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
## template
```python
from typing import List
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums) == 0:
return []
result = []
unique = {}
inv = {}
left = None
right = None
nums.sort()
i = 0
while i < len(nums):
if left == None and nums[i] >= 0:
left = i
if right == None and nums[i] > 0:
right = i
inv[nums[i]] = i
i += 1
if left == 0:
right = len(nums)
if right is None:
return []
i = 0
while i < right:
j = i+1
while j < len(nums) and (-nums[i] >= nums[j] * 2):
last = 0-nums[i]-nums[j]
k = inv.get(last)
if k and k > j:
list = [nums[i], nums[j], last]
hash = f'{list[0]}_{list[1]}_{list[2]}'
if unique.get(hash) is None:
unique[hash] = True
result.append(list)
j += 1
i += 1
return result
# %%
s = Solution()
print(s.threeSum(nums = [-1,0,1,2,-1,-4]))
```
## 答案
```python
```
## 选项
### A
```python
```
### B
```python
```
### C
```python
```