【Leetcode 每日一题 - 补卡】1128. 等价多米诺骨牌对的数量

问题背景

给你一组多米诺骨牌 dominoesdominoesdominoes
形式上,dominoes[i]=[a,b]dominoes[i] = [a, b]dominoes[i]=[a,b]dominoes[j]=[c,d]dominoes[j] = [c, d]dominoes[j]=[c,d] 等价 当且仅当 ( a=ca = ca=cb=db = db=d ) 或者 ( a=da = da=db=cb = cb=c ) 。即一张骨牌可以通过旋转 000 度或 180180180 度得到另一张多米诺骨牌。
0≤i<j<dominoes.length0 \le i < j < dominoes.length0i<j<dominoes.length 的前提下,找出满足 dominoes[i]dominoes[i]dominoes[i]dominoes[j]dominoes[j]dominoes[j] 等价的骨牌对 (i,j)(i, j)(i,j) 的数量。

数据约束

  • 1≤dominoes.length≤4×1041 \le dominoes.length \le 4 \times 10 ^ 41dominoes.length4×104
  • dominoes[i].length=2dominoes[i].length = 2dominoes[i].length=2
  • 1≤dominoes[i][j]≤91 \le dominoes[i][j] \le 91dominoes[i][j]9

解题过程

包含相同元素的二元组等价,求等价的二元组数量。
实际上只要用哈希表记录元素相同的二元组数量即可,考虑到数据范围不大,用二维数组就行了。

具体实现

class Solution {
    public int numEquivDominoPairs(int[][] dominoes) {
        int res = 0;
        int[][] cnt = new int[10][10];
        for (int[] dominoe : dominoes) {
            int min = Math.min(dominoe[0], dominoe[1]);
            int max = Math.max(dominoe[0], dominoe[1]);
            res += cnt[min][max]++;
        }
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值