Skip to content

Commit 5558aa2

Browse files
committed
Create: 2001-number-of-pairs-of-interchangeable-rectangles.rs
1 parent 40c68ec commit 5558aa2

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::collections::HashMap;
2+
impl Solution {
3+
pub fn compute_gcd(mut a: i32, mut b: i32) -> i32 {
4+
while a > 0 && b > 0 {
5+
if a > b {
6+
a %= b;
7+
} else {
8+
b %= a;
9+
}
10+
}
11+
if a == 0 {
12+
b
13+
} else {
14+
a
15+
}
16+
}
17+
pub fn interchangeable_rectangles(rectangles: Vec<Vec<i32>>) -> i64 {
18+
rectangles
19+
.into_iter()
20+
.map(|v| {
21+
let gcd = Solution::compute_gcd(v[0], v[1]);
22+
(v[0] / gcd, v[1] / gcd)
23+
})
24+
.fold(HashMap::new(), |mut dict, t| {
25+
dict.entry(t).and_modify(|cnt| *cnt += 1).or_insert(1);
26+
dict
27+
})
28+
.into_iter()
29+
.filter(|(_, v)| *v > 1)
30+
.map(|(_, v)| v)
31+
.fold(0, |mut cnt, v| {
32+
cnt += v * (v - 1) / 2;
33+
cnt
34+
})
35+
}
36+
}

0 commit comments

Comments
 (0)