leetcode_rust/
four_sum_2.rs1#![allow(dead_code)]
2
3pub fn four_sum_count(a: Vec<i32>, b: Vec<i32>, c: Vec<i32>, d: Vec<i32>) -> i32 {
6 use std::collections::HashMap;
7
8 let mut sums = HashMap::new();
9 let mut count = 0;
10 for &num_a in a.iter() {
11 for &num_b in b.iter() {
12 let sum = num_a + num_b;
13 match sums.get_mut(&sum) {
14 Some(x) => {
15 *x += 1;
16 }
17 None => {
18 sums.insert(sum, 1);
19 }
20 }
21 }
22 }
23
24 for &num_c in c.iter() {
25 for &num_d in d.iter() {
26 let sum = -num_c - num_d;
27 match sums.get(&sum) {
28 Some(x) => {
29 count += *x;
30 }
31 None => {}
32 }
33 }
34 }
35
36 count
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn test1() {
45 let res = four_sum_count(vec![1, 2], vec![-2, -1], vec![-1, 2], vec![0, 2]);
46 assert_eq!(res, 2);
47 let res = four_sum_count(vec![-1, -1], vec![-1, 1], vec![-1, 1], vec![1, -1]);
48 assert_eq!(res, 6);
49 }
50}