题目内容
思路分析
这个问题比较难,因为很不容易相同,采用的是Carl的思路进行编写,这是本人第一次完全复现很是开心。
- 定义一个map,key为 a 和 b 之和,value为 a 和 b 之和出现的次数。
- 同样遍历 c 和 d,放入哈希表中
- 采用 count 计数,累加出现的次数 因为 key 的乘积。
代码
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
dis = {}
det={}
for i in range(len(nums1)):
for j in range(len(nums2)):
k= nums1[i]+nums2[j]
if k not in dis:
dis[k]=1
else:
dis[k]+=1
for i in range(len(nums3)):
for j in range(len(nums4)):
k= nums3[i]+nums4[j]
if k not in det:
det[k]=1
else:
det[k]+=1
count=0
for key1 in dis:
for key2 in det:
if key1+key2==0:
count+= dis[key1]*det[key2]
return count
debug一下可以看的更加清楚。
就是在nums1和nums2中-1出现两次,0出现了一次。同理也可以得到剩下的,和为0就是出现次数的乘积
通过了测试但是觉得代码还可以优化一下,再看看别人的思路,还是很开心。