15 Three Sum
思路: 最外层套一个循环,里面是Two Sum, 排序之后使用two pointer 来解,排序之后还有一个好处,就是在枚举和移动指针的时候,相等的值可以跳过,这样可以直接去重。
class Solution:
def threeSum(self, nums):
nums.sort()
results = []
length = len(nums)
for i in range(0, length - 2):
if i and nums[i] == nums[i - 1]:
continue
self.find_two_sum(nums, i + 1, length - 1, -nums[i], results)
return results
def find_two_sum(self, nums, left, right, target, results):
while left < right:
if nums[left] + nums[right] == target:
results.append([-target, nums[left], nums[right]])
right -= 1
left += 1
while left < right and nums[left] == nums[left - 1]:
left += 1
while left < right and nums[right] == nums[right + 1]:
right -= 1
elif nums[left] + nums[right] > target:
right -= 1
else:
left += 1