解题思路:
使用map
四个数组两两一组
前两个数组的各个值遍历相加,和为key,出现的次数为value
后两个数组的各个值遍历相加,如果该值的负数能在map中找到(表示能抵消为0,符合题意四数之和为0),则cnt加上map中对应出现的次数value
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer, Integer> map = new HashMap<>();
int cnt = 0;
for (int num1 : nums1) {
for (int num2 : nums2) {
int sum = num1 + num2;
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
}
for (int num3 : nums3) {
for (int num4 : nums4) {
int target = 0 - (num3 + num4);
if (map.containsKey(target)) cnt += map.get(target);
}
}
return cnt;
}
}