题目:
![](https://img.haomeiwen.com/i14628036/12841c7bcfd47245.png)
解法:
- 先对数组从小到大排序。
- 最外层遍历整个数组,再设置两个双指针,当三数之和小于0时,右指针向左移动一位;当三数之和大于0时,左指针向右移动一位。
- 结果中会遇到重复的结果,所以设置一个set,用于存放不重复的数组。
具体代码如下:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
res_list = []
res = set()
nums.sort()
for i in range(len(nums)):
left, right = i+1, len(nums)-1 # 双指针
while left < right:
if nums[i]+nums[left]+nums[right]>0:
right -= 1
elif nums[i]+nums[left]+nums[right]<0:
left += 1
else:
res.add((nums[i],nums[left],nums[right]))
left += 1
right -= 1
for r in res:
res_list.append(list(r))
return res_list
网友评论