JZX轻语:简

LeetCode 3239 - 最少翻转次数使二进制矩阵回文 I

发表于2024年08月09日

#双指针

直接计算两种方法(要么保证所有行回文,要么保证列回文)的翻转次数,取最小值即可: 遍历每一行/列,使用双指针判断是否回文,如果不是则累加翻转次数。

class Solution:
    def minFlips(self, grid: List[List[int]]) -> int:
        m, n = len(grid), len(grid[0])
        # 行翻转
        row_ans = 0
        for i in range(m):
            l, r = 0, n - 1
            while l < r:
                if grid[i][l] != grid[i][r]:
                    row_ans += 1
                l += 1
                r -= 1
        # 列翻转
        col_ans = 0
        for i in range(n):
            l, r = 0, m - 1
            while l < r:
                if grid[l][i] != grid[r][i]:
                    col_ans += 1
                l += 1
                r -= 1
        # 取两种方法的最小值
        return min(row_ans, col_ans)

闪念标签:LC

题目链接:https://leetcode.cn/problems/minimum-number-of-flips-to-make-binary-grid-palindromic-i/