跳到主要内容

3240.最少翻转次数使二进制矩阵回文II

链接:3240.最少翻转次数使二进制矩阵回文II
难度:Medium
标签:数组、双指针、矩阵
简介:请你返回 最少 翻转次数,使得矩阵中 所有 行和列都是 回文的 ,且矩阵中 1 的数目可以被 4 整除 。

题解 1 - undefined

  • 编辑时间:2024-11-16
  • 执行用时:230ms
  • 内存消耗:56.31MB
  • 编程语言:undefined
  • 解法介绍:分类讨论
class Solution:
def minFlips(self, grid: List[List[int]]) -> int:
n = len(grid)
m = len(grid[0])
res = cnt = dif = 0
for i in range(n // 2):
for j in range(m // 2):
v = grid[i][j] + grid[i][m - 1 - j] + grid[n - 1 - i][j] + grid[n - 1 - i][m - 1 - j]
res += min(v, 4 - v)
if n % 2 and m % 2: res += grid[n // 2][m // 2]
if n % 2:
cnt += sum(2 for j in range(m // 2) if grid[n // 2][j] == grid[n // 2][m - 1 - j] == 1)
dif += sum(grid[n // 2][j] != grid[n // 2][m - 1 - j] for j in range(m // 2))
if m % 2:
cnt += sum(2 for i in range(n // 2) if grid[i][m // 2] == grid[n - 1 - i][m // 2] == 1)
dif += sum(grid[i][m // 2] != grid[n - 1 - i][m // 2] for i in range(n // 2))
if cnt % 4 == 0: res += dif
elif dif > 0: res += dif
else: res += 2
return res