0%

Leetcode 015 3 Sum

题目要求

输入数组和,求出数组中所有不重复的三元组,使得三元组只和为0。

思路:

先对全部数组排序,假设三元组的对应的位置是 i, j, k ,令 i 从左至右循环,j, ki 右侧的两边向中间循环。遇到和为0的三个元素则记录下并将 j, k继续向中间循环直至遇到不重复的元素,如和小于零则向右移动 j,否则向左移动 k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution(object):
def threeSum(self, nums):
if nums is None or nums == []:
return []
if len(nums) < 3:
return []
nums.sort()
solns = []
l = len(nums)
for i in range(0, l - 2):
if i and nums[i] == nums[i - 1]:
continue
j, k= i + 1, l - 1
while j < k:
test = nums[i] + nums[j] + nums[k]
if test == 0:
soln = [nums[i], nums[j], nums[k]]
solns.append(soln)
j += 1
while j < k and nums[j] == nums[j - 1]:
j += 1
k -= 1
while j < k and nums[k] == nums[k + 1]:
k -= 1
elif test > 0:
k -= 1
else:
j += 1
return solns