Q
给你一个由一些多米诺骨牌组成的列表 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
A
官解
1 | class Solution { |
思路
将多米诺骨牌 dominoes[i] = [a, b] 转换为唯一的int值。
提示 1 <= dominoes[i][j] <= 9,可由此让每一个二元对都变为指定的格式,设定第一维必须不大于第二维。
因为等价的二元对元素可以相互翻转,所以当a>b时,10*a+b 即可确定顺序相反的两个二元对([a,b][b,a]])唯一的值。
又因为 1 <= dominoes[i][j] <= 9,所以存放结果的集合可以直接设定长度为100(最大值90+9,即最多访问到num[99],则数组长度应为100)时间复杂度:
O(n),其中 n 是多米诺骨牌的数量。我们至多只需要遍历一次该数组。空间复杂度
O(1)