1 """
2 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.
3 Note:
4 The solution set must not contain duplicate triplets.
5 Example:
6 Given array nums = [-1, 0, 1, 2, -1, -4],
7 A solution set is:
8 [
9 [-1, 0, 1],
10 [-1, -1, 2]
11 ]
12 """
13 """
14 two Sum用了hash。而Three Sum不需要用
15 先对数组排序
16 然后用三个指针 i, l, r 来进行遍历
17 先确定一个i的值,将i指向第一个不重复的值,l 指向头,r指向尾
18 第二层循环 while l<r
19 如果和大于0, r左移
20 如果和小于0, l右移
21 如果和等于0,保存结果
22 将l,r分别移到不重复这个值的位置
23 l,r再同时左移和右移
24 """
25 class Solution:
26 def threeSum(self, nums):
27 res = []
28 nums.sort()
29 for i in range(len(nums) -2):
30 if i > 0 and nums[i] == nums[i-1]:
31 continue
32 l, r = i+1, len(nums)-1
33 while l < r:
34 if nums[i] + nums[l] + nums[r] > 0:
35 r -= 1
36 elif nums[i] + nums[l] + nums[r] < 0:
37 l += 1
38 else:
39 res.append([nums[i], nums[l], nums[r]])
40 while l < r and nums[l] == nums[l+1]:
41 l += 1
42 while l < r and nums[r] == nums[r-1]:
43 r -= 1
44 l += 1
45 r -= 1
46 return res