【LeetCode每日一题】[困难]454. 四数相加 II
454. 四数相加 II
算法思想:组合
题目:
java代码
- 分成两个数之和A+B,两个数之和C+D,
- 然后再判断(A+B)+(C+D)有多少种
- A+B的结果可以利用map存起来,查找更快捷
class Solution {
//思路,分成两个数之和A+B,两个数之和C+D,然后再判断(A+B)+(C+D)有多少种
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
//使用map存储A+B的值,提高查找效率
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int n = A.length;
//遍历A+B的所有组合,用map记录结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map.put(A[i]+B[j], map.getOrDefault(A[i]+B[j], 0)+1);
}
}
int ans = 0;
//遍历C+D的所有组合,再查询map,看能否找到元组
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map.containsKey(-C[i]-D[j])) {
ans += map.get(-C[i]-D[j]);
}
}
}
return ans;
}
}