思路:把四个数组拆成两对,两个分别相加,记录第一对的相加结果进map里,再把第二对数组 0-nums2-nums4 去map里面找出现了几次,这题不用对重复的四元组去重,所以出现多次都有效。
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
HashMap<Integer,Integer> map = new HashMap();
int count = 0;
//先将前2个数组加起来的值存放map,并且记录出现了多少次,而且这里不用去重四元组的;
for(int i=0;i<nums1.length;i++) {
for(int j=0; j<nums2.length;j++){
int ab = nums1[i]+nums2[j];
if(map.containsKey(ab)){
map.put(ab, map.get(ab)+1 );
}else{
map.put(ab, 1);
}
}
}
//将另外两个数组的值用0减去,再去map里找有没有出现过,出现过几次,新增的结果是出现的次数
for(int k=0;k<nums3.length;k++) {
for(int l=0; l<nums4.length;l++){
int target = 0-(nums3[k]+nums4[l]);
if(map.containsKey(target)){
count += map.get(target);
}
}
}
return count;
}
}