题目
思路
固定一个数字,问题转化为twoSum。注意去重。
代码
class Solution:
def __init__(self):
self.res_list = []
def twoSum(self, nums, left, right, target):
while left < right:
if left < right and nums[left] + nums[right] < target: left += 1
elif left < right and nums[left] + nums[right] > target: right -= 1
else:
self.res_list.append([-target, nums[left], nums[right]])
left += 1
while left < right and left and nums[left] == nums[left - 1]:
left += 1
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums: return []
nums.sort()
for i in range(len(nums)):
if i != 0 and nums[i] == nums[i - 1]: continue
self.twoSum(nums, i + 1, len(nums) - 1, -nums[i])
return self.res_list