Given a list of dominoes
, dominoes[i] = [a, b]
is equivalent to dominoes[j] = [c, d]
if and only if either (a==c
and b==d
), or (a==d
and b==c
) - that is, one domino can be rotated to be equal to another domino.
Return the number of pairs (i, j)
for which 0 <= i < j < dominoes.length
, and dominoes[i]
is equivalent to dominoes[j]
.
Example 1:
Input: dominoes = [[1,2],[2,1],[3,4],[5,6]] Output: 1
Constraints:
1 <= dominoes.length <= 40000
1 <= dominoes[i][j] <= 9
struct Solution;
use std::collections::HashMap;
impl Solution {
fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
let mut hs: HashMap<Vec<i32>, i32> = HashMap::new();
let mut sum = 0;
for d in dominoes {
let a = d[0];
let b = d[1];
if a < b {
*hs.entry(vec![a, b]).or_default() += 1;
} else {
*hs.entry(vec![b, a]).or_default() += 1;
}
}
for v in hs.values() {
sum += v * (v - 1) / 2;
}
sum
}
}
#[test]
fn test() {
let dominoes: Vec<Vec<i32>> = vec_vec_i32![[1, 2], [2, 1], [3, 4], [5, 6]];
assert_eq!(Solution::num_equiv_domino_pairs(dominoes), 1);
}