当前位置: 代码迷 >> 综合 >> LeetCode—— 1128 等价多米诺骨牌对的数量
  详细解决方案

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

热度:77   发布时间:2023-10-15 14:33:16.0

问题描述

给你一个由一些多米诺骨牌组成的列表 dominoes。

如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。

形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。

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

示例:输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出:1提示:1 <= dominoes.length <= 40000
1 <= dominoes[i][j] <= 9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

执行结果

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

代码描述

思路:把每个对数,转化为10进制,存入map<key, val> ,键即为每个对,值为出现的次数。然后对每个数对的次数计算 LeetCode—— 1128 等价多米诺骨牌对的数量,并求和。

class Solution {
public:int numEquivDominoPairs(vector<vector<int>>& dominoes) {int temp = 0;map<int, int> key_count;for(int i = 0; i < dominoes.size(); ++i){if(dominoes[i][0] >= dominoes[i][1])        // 特殊处理,这样数对相同的,直接放在一起{temp = dominoes[i][0]*10 + dominoes[i][1];}else{temp = dominoes[i][1]*10 + dominoes[i][0];}key_count[temp] += 1;}int res = 0;map<int, int>::iterator it = key_count.begin();for(; it != key_count.end(); ++it){res += (it->second * (it->second - 1))/2;}return res;}
};