等价的骨牌对排序后的结果必然相同,故先对内部的每个数组排序,然后用字典记录相同元素的个数,如d[a]=1,表示在所有骨牌里a个数为1.可发现规律,2个相同的有一对,3个相同的有(2+1)对,4个相同的有(3+2+!)对。最后只需将排序后个数大于一的按此规律累加即可。
class Solution(object):
def numEquivDominoPairs(self, dominoes):
"""
:type dominoes: List[List[int]]
:rtype: int
"""
count = 0
d = {}
'''i = 0
while i < len(dominoes):
if (dominoes[i][1], dominoes[i][0]) not in d.keys() \
and (dominoes[i][0], dominoes[i][1]) not in d.keys():
d[(dominoes[i][0], dominoes[i][1])] = 1
elif (dominoes[i][0], dominoes[i][1]) not in d.keys() \
and (dominoes[i][1], dominoes[i][0]) in d.keys():
d[(dominoes[i][1], dominoes[i][0])] += 1
else:
d[(dominoes[i][0], dominoes[i][1])] += 1
i += 1'''
dominoes1 = [sorted(a) for a in dominoes[:]]
for p in dominoes1:
t = tuple(p)
if t not in d.keys():
d[t] = 1
else:
d[t] += 1
for v in d.values():
if v > 1:
for j in range(v):
count += j
return count