leetcode_rust/
number_of_boomerangs.rs1#![allow(dead_code)]
2
3pub fn number_of_boomerangs(points: Vec<Vec<i32>>) -> i32 {
5 use std::collections::HashMap;
6
7 let mut map = HashMap::new();
8 let mut count: i32 = 0;
9 for i in 0..points.len() {
10 for j in 0..points.len() {
11 if i == j {
12 continue;
13 }
14 let x_diff = points[i][0] - points[j][0];
15 let y_diff = points[i][1] - points[j][1];
16 let dis = x_diff * x_diff + y_diff * y_diff;
17 match map.get_mut(&dis) {
18 Some(v) => *v += 1,
19 None => {
20 map.insert(dis, 1);
21 }
22 }
23 }
24 let sum: i32 = map.iter().map(|(_, &x)| x * (x - 1)).sum();
25 count += sum;
26 map.clear();
27 }
28
29 count
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn test1() {
38 let points = vec![vec![0, 0], vec![1, 0], vec![2, 0]];
39 assert_eq!(number_of_boomerangs(points), 2);
40
41 let points = vec![vec![0, 0], vec![1, 0], vec![-1, 0], vec![0, 1], vec![0, -1]];
42 assert_eq!(number_of_boomerangs(points), 20);
43
44 let points = vec![vec![0, 0], vec![2, 1], vec![2, 0], vec![0, 1]];
45 assert_eq!(number_of_boomerangs(points), 0);
46 }
47}