题目
In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the ith domino. (A domino is a tile with two numbers from 1 to 6 - one on each half of the tile.)
We may rotate the ith domino, so that A[i] and B[i] swap values.
Return the minimum number of rotations so that all the values in A are the same, or all the values in B are the same.
If it cannot be done, return -1.
解题思路
如果答案存在,那么答案一定是第一个骨牌上面的数或者下面的数,分别计算把所有骨牌都转成和这两个数在上面相同或者在下面相同,所需的旋转次数,返回最小值
代码
class Solution:
    def minDominoRotations(self, A: List[int], B: List[int]) -> int:
        def check(n):
            reta = retb = 0
            for i in range(len(A)):
                if A[i] != n and B[i] != n:
                    return -1
                if A[i] != n:
                    reta += 1
                elif B[i] != n:
                    retb += 1
            return min(reta, retb)
        
        res = check(A[0])
        if res != -1 or A[0] == B[0]:
            return res
        return check(B[0])
