https://leetcode-cn.com/problems/3sum/submissions/
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = list()
if len(nums) < 3:
return result
nums.sort()
print nums
a_pos = 0
b_pos = 1
tmp = -1
c_pos = len(nums) - 1
while a_pos < len(nums) - 2:
if tmp != -1:
while a_pos < len(nums) - 2 and nums[tmp] == nums[a_pos]:
a_pos += 1 # 因为要防止重复,需要换一个value开始做
if a_pos >= len(nums) - 2:
break
b_pos = a_pos + 1
c_pos = len(nums) - 1
if nums[a_pos] > 0:
break
while b_pos < c_pos:
if nums[a_pos] + nums[b_pos] + nums[c_pos] < 0:
tmp = b_pos
b_pos += 1
elif nums[a_pos] + nums[b_pos] + nums[c_pos] > 0:
c_pos -= 1
else:
result.append([nums[a_pos], nums[b_pos], nums[c_pos]])
tmp = b_pos
b_pos += 1
while b_pos <= c_pos and nums[b_pos] == nums[tmp]: # 同样是为了防止重复
b_pos += 1
c_pos -= 1
tmp = a_pos
a_pos += 1
return result