1128. 等价多米诺骨牌对的数量

简介: 1128. 等价多米诺骨牌对的数量

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你一组多米诺骨牌 dominoes

形式上,dominoes[i] = [a, b]dominoes[j] = [c, d] 等价 当且仅当 (a == cb == d) 或者 (a == db == c) 。即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。

0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i]dominoes[j] 等价的骨牌对 (i, j) 的数量。

示例 1:

输入: dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出: 1

示例 2:

输入: dominoes = [[1,2],[1,2],[1,1],[1,2],[2,2]]
输出: 3

提示:

  • 1 <= dominoes.length <= 4 * 104
  • dominoes[i].length == 2
  • 1 <= dominoes[i][j] <= 9

解题思路

函数接受一个二维数组 dominoes,其中每个元素表示一对多米诺骨牌。该函数使用一个对象 cnt 来统计每种多米诺骨牌的出现次数。然后遍历 cnt 对象,计算每种多米诺骨牌的等价对的数量,并累加到变量 res 中。最后返回 res。

具体实现是通过将每对多米诺骨牌排序并转换为字符串作为键来统计其出现次数。然后根据组合公式计算每种多米诺骨牌的等价对的数量,并累加到结果中。

AC代码

/**
 * @param {number[][]} dominoes
 * @return {number}
 */
var numEquivDominoPairs = function(dominoes) {
    const cnt = {};
    for(const domino of dominoes){
        const key = domino.sort().join('-');
        let val = cnt[key] || 0;
        cnt[key] = val + 1;
    }
    let res = 0;
    for(const key in cnt){
        const count = cnt[key] - 1;
        res += (1 + count) * count / 2;
    }
    return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
6月前
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
|
Python
foreach、for in 和for of的区别?判断一个字符串中出现次数最多的字符,统计这个次数?
foreach、for in 和for of的区别?判断一个字符串中出现次数最多的字符,统计这个次数?
49 0
1245:不重复地输出数 2020-12-28
1245:不重复地输出数 2020-12-28
|
人工智能 Unix BI
1370:最小函数值(minval)
1370:最小函数值(minval)
|
存储 算法
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
100 0
|
C语言 C++
1684. 统计一致字符串的数目
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。 请你返回 words 数组中 一致字符串 的数目。
96 0
|
SQL
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
126 0
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
输出2000-3000之间所有十位数是m且是n的倍数的数的个数
输出2000-3000之间所有十位数是m且是n的倍数的数的个数
118 0