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)