代码随想录一一一哈希表一一一四数相加II

题目来源自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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值