题目:给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
解题设计:求解三数之和,可以用三层循环分别找到符合题意的三个数,但是那样所需要的时间则为O(n3),是一种解决方法,但是很耗时间。所以可以将三数之和考虑为2+1的形式,先求解两个数的和,此处三数之和为0,则需要找的第三个数则为求和两数的相反值。而找这个数在python中非常简单,假设这个数为c,则只需要写c in nums即可判断是否存在这个数,但只做这个判断有可能会使同一个数在解答的一个三元组中出现两次,所以此处采用字典的形式,将每个元素与其所对应的下标组成键值对。这样即可轻易地避免元素重复地出现。
代码:
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
m={}
for i in range(len(nums)):
m[nums[i]]=i
l = []
for a in range(len(nums)):
for b in range(len(nums)):
if (a != b) and -(nums[a]+nums[b]) in nums and (a!=m[-(nums[a]+nums[b])]) and (b!=m[-(nums[a]+nums[b])]):
l.append(sorted([nums[a],nums[b],-(nums[a]+nums[b])]))
return(list(list(t) for t in(set([tuple(t) for t in l]))))