1. 解题思路
这一题思路上的话就是分别考察一下把所有行都变成回文所需要的flip次数和把所有列都变成回文所需要的flip次数,然后取较小值即可。
而这个问题又变成了如何考察把任意array变成回文所需要的flip次数,这个的话只要头尾依次对比考察不一致的位置的个数即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minFlips(self, grid: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
def fn(arr):
ans = 0
l = len(arr)
for i in range(l // 2):
if arr[i] != arr[l-1-i]:
ans += 1
return ans
ans1 = sum(fn(grid[i]) for i in range(n))
cols = [[grid[i][j] for i in range(n)] for j in range(m)]
ans2 = sum(fn(cols[j]) for j in range(m))
return min(ans1, ans2)
提交代码评测得到:耗时2382ms,占用内存70.1MB。