- 首先对nums进行排序
- 设置left,right两个指针,三数之和大于0,right左移;小于0,left右移;等于0,加入结果集,此处要注意不能直接break,进行下一个i的判断,而是还要将left右移以及right左移,因为还有接下来还可能存在等于0的情况。
- 最后进行去重,注意list类型不能作为set的元素。
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums or len(nums) < 3:
return []
#双指针法
#首先从小到大
nums.sort()
res = []
for i in range(len(nums)-2):
left = i+1
right = len(nums)-1
while right > left:
sum_3 = nums[i] + nums[left] + nums[right]
if sum_3 < 0:
left += 1
elif sum_3 > 0:
right -= 1
else:
temp = [nums[i],nums[left],nums[right]]
res.append(temp)
left += 1
right -= 1
#检查重复
res_set = []
for x in res:
if x not in res_set:
res_set.append(x)
return res_set
参考:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html#双指针