题目
思路分析
题目要求:在数组中找4个数,和为最后的target
- 通过2层循环,建立每2数之和的每一种情况的字典(2数之和:2数下标)
- 判断 另外2个数的和,是否在字典里
- 如果在字典里,并且不重复,再添加到最终的结果
代码展示
class Solution:
def fourSum(self, nums, target):
numslen =len(nums)
#如果不加排序 结果会重复
nums.sort()
#最后的结果是一个集合,不允许有重复
res = set()
#建立字典
dic = {}
#通过2层循环,建立2数之和的每一种情况
for i in range(numslen-1):
# for j in range(1,numslen):
for j in range(i+1,numslen):
temp = nums[i]+nums[j]
if temp not in dic:
dic[temp]=[(i,j)]
else:
dic[temp].append((i,j))
#判断 另外2个数的和,是否在字典里
for i in range(numslen-1):
for j in range(i+1,numslen):
numone = nums[i]+nums[j]
numtwo = target-numone
if numtwo in dic:
for p in dic[numtwo]:
#在字典里,并且不重复,添加到最终的结果
if p[0]>j:
# res.append((i,j,p[0],p[1]))
# res.add((i,j,p[0],p[1]))
res.add((nums[i],nums[j],nums[p[0]],nums[p[1]]))
res1 = []
for i in res:
res1.append(i)
return res1
if __name__ == "__main__":
a = Solution()
print(a.fourSum([1,0,-1,0,-2,2],0))