英文题目
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
中文题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
解答
Python
class Solution:
# 思路: 先排序, 然后规定第一个数不动, 后面双指针法求和.并且去重
def threeSum(self, nums: 'List[int]') -> 'List[List[int]]':
n = len(nums)
res = []
if n < 3:
return res
nums.sort()
for i in range(n):
if i > 0 and nums[i] == nums[i - 1]: # 判断固定的数是否重复
continue
left = i + 1
right = n - 1
while left < right:
cur = nums[i] + nums[left] + nums[right]
if cur == 0:
res.append([nums[i], nums[left], nums[right]])
while left < right and nums[left] == nums[left + 1]: # 判断是否重复
left += 1
while right < left and nums[right] == nums[right - 1]:
right -= 1
left += 1
right -= 1
elif cur > 0:
right -= 1
else:
left += 1
return res