給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合爲:
[
[-1, 0, 1],
[-1, -1, 2]
]
解題思路:
1.先對列表進行排序,方便判斷重複的數字。
2.選定nums[i]作爲第一個數,則另外兩個數之合sum = 0 - nums[i]。
3.nums[i]若大於0,則停止操作。因爲列表已經排序,nums[i]後面的數字都是正數,正數之合大於0。
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums_len = len(nums)
ls = []
if nums_len < 3:
return ls
nums.sort()
for i in range(nums_len - 2):
if nums[i] > 0:
break
if i == 0 or nums[i] != nums[i - 1]:
l = i + 1
r = nums_len - 1
sum = 0 - nums[i]
while l < r:
if nums[l] + nums[r] == sum:
ls.append((nums[i], nums[l], nums[r]))
while l < r and nums[l] == nums[l + 1]:
l += 1
while l < r and nums[r] == nums[r - 1]:
r -= 1
l += 1
r -= 1
elif nums[l] + nums[r] < sum:
l += 1
else:
r -= 1
return ls