class Solution:
def fourSum(self, nums, target):
d=dict()
n = len(nums)
if n<4:
return []
if n == 4:
if sum(nums)==target:
return [nums]
# 遍历一次,计算两个数的和,存在字典里,键是两数之和
# 值是一个列表,存储所有符合条件的两数索引的列表
# 如 [1,2,3,4,1] 算两数和为5,则有:5:[[0,3],[1,2],[3,4]]
for i in range(n):
for j in range(i+1,n):
if nums[i]+nums[j] not in d.keys():
d[nums[i]+nums[j]] = [[i,j]]
else:
d[nums[i]+nums[j]].append([i,j])
# 结果列表
result= []
for i in range(n):
for j in range(i+1,n):
# 目标值减去两数的差,在字典中能找到,但索引不重复(值可以相同,但在原数组列表的位置不同)
for a,b in d.get(target-nums[i]-nums[j],[]):
# 索引集合
temp={
i,j,a,b}
# 如果索引值都不重复
if len(temp)==4:
# 排序是为了方便判断后序满足条件的列表在不在结果列表里
# 如果在,直接过滤掉
sumList = sorted([nums[t] for t in temp])
if sumList not in result:
result.append(sumList)
return result
LeetCode T18
猜你喜欢
转载自blog.csdn.net/wjl__ai__/article/details/112158557
今日推荐
周排行