57. 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
样例Example 1:
Input:[2,7,11,15]
Output:[]
Example 2:
Input:[-1,0,1,2,-1,-4]
Output: [[-1, 0, 1],[-1, -1, 2]]
注意事项Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
思想:
先排序,再进行遍历,以此为基准,定义low和high进行遍历判断
class Solution:
"""
@param numbers: Give an array numbers of n integer
@return: Find all unique triplets in the array which gives the sum of zero.
"""
def threeSum(self, numbers):
# write your code here
numbers.sort()
groups = []
n = len(numbers)
for i in range(0, n - 2):
if i == 0 or (i > 0 and numbers[i] != numbers[i-1]):
low = i + 1
high = n - 1
sum = 0 - numbers[i]
while low < high:
if numbers[low] + numbers[high] == sum:
groups.append([numbers[i], numbers[low], numbers[high]])
while low < high and numbers[low] == numbers[low+1]:
low += 1
while low < high and numbers[high] == numbers[high-1]:
high -= 1
low += 1
high -= 1
elif numbers[low] + numbers[high] > sum:
high -= 1
else:
low += 1
return groups