สมมติว่าเรามีรายการโดมิโน โดมิโนแต่ละตัวมีตัวเลขสองตัว โดมิโนสองตัว D[i] =[a, b] และ D[j] =[c, d] จะเหมือนกันถ้า a =c และ b =d หรือ a =d และ b =c ดังนั้นหนึ่งโดมิโนสามารถย้อนกลับได้ เราต้องส่งคืนจำนวนคู่ (i, j) ซึ่ง 0 <=i
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ให้คำตอบ =0
- สำหรับแต่ละคู่ p ในรายการโดมิโน −
- จัดเรียงคู่ p
- จากนั้นเก็บความถี่ของแต่ละโดมิโนลงใน D
- สำหรับค่า b ใน D −
- answer :=answer + (b * (b - 1))/2
- ส่งคืนคำตอบ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def numEquivDominoPairs(self, dominoes): d = {} ans = 0 for i in dominoes: i.sort() i = tuple(i) if i not in d: d[i]= 1 else: d[i]+=1 for b in d.values(): ans += ((b*(b-1))//2) return ans ob1 = Solution() print(ob1.numEquivDominoPairs([[1,2],[2,1],[3,4],[5,6], [4,3]]))
อินพุต
[[1,2],[2,1],[3,4],[5,6],[4,3]]
ผลลัพธ์
2