我们遍历所有的二元组(i,j)的时候,要注意找到的另外一个二元组(m,k)和(i,j)组成了(i,j,m,k),由于(i,j)会遍历所有的二元组,所以我们要通过对大小顺序进行限制来保证该四元组的不重复。i < j < j < m < k。另外四元组不重复不代表(nums[i],nums[j],nums[m],nums[k])不重复,所以还需要在一开始进行一次sort来让两者大小顺序对应。另外由于元素有重复的地方,所以必须要将答案用set保存来去重。
classSolution(object):deffourSum(self,nums,target):
result = set()
n = len(nums)
my_map = {}
nums.sort()
my_count = set()
for i in range(n):
for j in range(i+1,n):
x = nums[i]+nums[j]
if x in my_map:my_map[x].append((i,j))
else:my_map[x]=[(i,j)]
for x in my_map:
if target-x in my_map:
for set1 in my_map[x]:
for set2 in my_map[target-x]:
i1,j1 = set1
i2,j2 = set2
if i2>j1:#avoid duplicate
result.add(tuple([nums[i1],nums[j1],nums[i2],nums[j2]]))
return [list(x) for x in result]