题目来源自leetcode与代码随想录
题目描述:
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0
解题思路:
A+B+C+D = 0
A+B=-C-D
A+C=-B-D
A+D=-B-C
四个数的任意两个都是其他两数之和的相反数
(1)383. 赎金信
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
# 创建哈希表
dic = dict()
cnt = 0
# 遍历 表1表2 并将其和存入哈希表中 结构为 和:出现次数
for item1 in nums1:
for item2 in nums2:
if item1 + item2 in dic:
dic[item1+item2] += 1
else:
dic[item1+item2] = 1
# 遍历 表3表4 检测 其和的相反数 是否存在于哈希表中
for item3 in nums3:
for item4 in nums4:
opposite_num = -item3 - item4
# 若存在 则存在当前34组合 与 12组合 的和为零
if opposite_num in dic:
cnt += dic[opposite_num]
return cnt