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

目录
相关文章
|
数据采集 JSON JavaScript
Python爬虫案例:抓取猫眼电影排行榜
python爬取猫眼电影排行榜数据分析,实战。(正则表达式,xpath,beautifulsoup)【2月更文挑战第11天】
748 2
Python爬虫案例:抓取猫眼电影排行榜
|
算法 安全 PHP
密码学系列之二:密码学基本概念
密码学系列之二:密码学基本概念
1705 0
密码学系列之二:密码学基本概念
|
域名解析 监控 算法
阿里云拨测:主动探测Web应用质量,助力提升用户体验
阿里云拨测是一种针对互联网应用(Web页面、网络链路等)进行应用性能和用户体验监测的服务,无需嵌码即可为云上用户提供开箱即用的企业级主动拨测式应用监测解决方案。
8625 106
阿里云拨测:主动探测Web应用质量,助力提升用户体验
|
域名解析
超简单 图解 三级域名解析
超简单 图解 三级域名解析 最近自己在玩 搭建 ngrok 内网穿透,用到了三级域名解析,类似:blog.ngrok.xxx.com 查了下,发现这类的教程非常少,于是,我来造福你们了 下面开始 一、添加二级域名解析 主机记录填写你要使用的二级域名,我填的ngrok, 记录值填你服务器的IP地址 二、添加三级域名解析 主机记录填写 你要用的(三级域名.二级域名)我这里是泛解析,用了*.ngrok,你可以泛解析到你的二级域名,记录值填写你刚刚添加的二级域名。
13564 3
|
存储 Java API
Java Optional 完全指南:彻底告别 NullPointerException
Java 8 引入的 `Optional` 类旨在解决 `null` 带来的空指针异常问题,通过提供容器类显式处理可能为空的值,提升代码健壮性和可读性。本文从基础到进阶解析 `Optional` 的用法,涵盖创建、检查、获取值、处理值等核心功能,结合实际应用场景与最佳实践,助你彻底告别 `NullPointerException`,编写更优雅的 Java 代码。
665 0
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
|
数据采集 JSON JavaScript
jsoup爬虫发送get、post请求、解析html、获取json
jsoup爬虫发送get、post请求、解析html、获取json
1316 0
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
SQL Web App开发 安全
Discuz历史漏洞分析(一)
Discuz是非常受欢迎的论坛型CMS,但是近年来DZ也爆出了很多经典漏洞,以下分析了几个不同类型的DZ历史漏洞(SQL注入、XSS、任意文件删除、弱加密算法、任意代码执行、HTTP HOST攻击等),提高安全人员的安全意识。
Discuz历史漏洞分析(一)

热门文章

最新文章

下一篇
开通oss服务