biweekly contest 136。

題目

輸入 m * n 的二進位矩陣 grid。

你可以將矩陣中任意格子的 0 翻轉成 1,或是 0 翻轉成 1。

最少需要翻轉幾次,才能使得矩陣中所有列所有行都回文。

解法

回文指的是正反向閱讀的順序都相同,每個元素都會對稱到另一個元素。
對應到的元素對不同則需要翻面,至於翻哪個則不重要。

暴力模擬,分別枚舉以行列為基準的回文需要多少次翻面。

class Solution:
    def minFlips(self, grid: List[List[int]]) -> int:
        M, N = len(grid), len(grid[0])
        
        # row palindromic
        row_diff = 0
        for r in range(M):
            for c in range(N // 2):
                if grid[r][c] != grid[r][N-1-c]:
                    row_diff += 1

        # col palindromic
        col_diff = 0
        for c in range(N):
            for r in range(M // 2):
                if grid[r][c] != grid[M-1-r][c]:
                    col_diff += 1

        return min(row_diff, col_diff)