目錄
一、題目
二、示例
三、思路
四、**
給你乙個由一些多公尺諾骨牌組成的列表 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
首先,先對列表進行排序。先將列表中的元素按照大小進行排序,之後再整體排序。
例如,將列表dominoes = [[2, 1], [1, 2], [1, 2], [1, 2], [2, 1], [1, 1], [1, 2], [2, 2]]進行排序得到,
dominoes = [[1, 1], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [2, 2]
tmp 變數計算相同骨牌的數量,利用 reduce函式計算 1 到 n 的和。例如,當列表中有3組骨牌相同,那麼他們可以組成 2 + 1 對。
最後,返回總數即可。
from functools import reduce
class solution:
def numequivdominopairs(self, dominoes) -> int:
""":param dominoes: list[list[int]]
:return: int
"""counts = 0
# 排序
for i in dominoes:
i.sort()
dominoes.sort()
# print(dominoes)
tmp = 1
for j in range(len(dominoes) - 1):
if dominoes[j] == dominoes[j + 1]:
tmp += 1
else:
counts += reduce(lambda x, y: x + y, range(1, tmp)) if tmp >= 2 else 0
tmp = 1
return counts
if __name__ == '__main__':
# dominoes = [[1, 2], [2, 1], [3, 4], [5, 6]]
# dominoes = [[1, 2], [1, 2], [1, 1], [1, 2], [2, 2]]
# dominoes = [[2, 2], [1, 2], [1, 2], [1, 1], [1, 2], [1, 1], [2, 2]]
dominoes = [[2, 1], [1, 2], [1, 2], [1, 2], [2, 1], [1, 1], [1, 2], [2, 2]]
s = solution()
ans = s.numequivdominopairs(dominoes)
print(ans)
1128 等價多公尺諾骨牌的數量
給你乙個由一些多公尺諾骨牌組成的列表 dominoes。如果其中某一張多公尺諾骨牌可以通過旋轉 0 度或 180 度得到另一張多公尺諾骨牌,我們就認為這兩張牌是等價的。形式上,dominoes i a,b 和 dominoes j c,d 等價的前提是 ac 且 bd,或是 ad 且 bc。在 0 ...
1128 等價多公尺諾骨牌對的數量
給你乙個由一些多公尺諾骨牌組成的列表 dominoes。如果其中某一張多公尺諾骨牌可以通過旋轉 0 度或 180 度得到另一張多公尺諾骨牌,我們就認為這兩張牌是等價的。形式上,dominoes i a,b 和 dominoes j c,d 等價的前提是 a c 且 b d,或是 a d 且 b c。...
1128 等價多公尺諾骨牌對的數量
題目描述 給你乙個由一些多公尺諾骨牌組成的列表 dominoes。如果其中某一張多公尺諾骨牌可以通過旋轉 0 度或 180 度得到另一張多公尺諾骨牌,我們就認為這兩張牌是等價的。形式上,dominoes i a,b 和 dominoes j c,d 等價的前提是 ac 且 bd,或是 ad 且 bc...