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

给你一个 m x n 的二进制矩阵 grid

如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。

你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0

请你返回 最少 翻转次数,使得矩阵 要么 所有行是 回文的 ,要么所有列是 回文的

示例 1:

**输入:**grid = [[1,0,0],[0,0,0],[0,0,1]]

**输出:**2

解释:

将高亮的格子翻转,得到所有行都是回文的。

示例 2:

**输入:**grid = [[0,1],[0,1],[0,0]]

**输出:**1

解释:

将高亮的格子翻转,得到所有列都是回文的。

示例 3:

**输入:**grid = [[1],[0]]

**输出:**0

解释:

所有行已经是回文的。

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m * n <= 2 * 10e5
  • 0 <= grid[i][j] <= 1

分析:分别对每行和每列进行遍历,计算将行、列变为回文的最小次数。

cpp 复制代码
int minFlips(int** grid, int gridSize, int* gridColSize) {
    int ans1=0,ans2=0;
    for(int i=0;i<gridSize;++i)
    {
        for(int j=0,k=*gridColSize-1;j<k;++j,--k)
        {
            if(grid[i][j]!=grid[i][k])ans1++;
        }
    }
    int n=*gridColSize;
    for(int i=0;i<n;++i)
    {
        for(int j=0,k=gridSize-1;j<k;++j,--k)
        {
            if(grid[j][i]!=grid[k][i])ans2++;
        }
    }
    return fmin(ans1,ans2);
}
相关推荐
Jeremy爱编码3 分钟前
电话号码的字母组合
java·算法·leetcode
YuTaoShao6 分钟前
【LeetCode 每日一题】1339. 分裂二叉树的最大乘积
算法·leetcode·职场和发展
leoufung7 分钟前
LeetCode 172. Factorial Trailing Zeroes 题解
算法·leetcode·职场和发展
梭七y20 分钟前
【力扣hot100题】(131)排序链表
算法·leetcode·链表
想进个大厂25 分钟前
代码随想录day6哈希表
算法·leetcode·散列表
圣保罗的大教堂35 分钟前
leetcode 1339. 分裂二叉树的最大乘积 中等
leetcode
im_AMBER1 小时前
Leetcode 97 移除链表元素
c++·笔记·学习·算法·leetcode·链表
有一个好名字1 小时前
力扣-最大连续1的个数III
c++·算法·leetcode
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——力扣 43 题:字符串相乘
数据结构·算法·leetcode·职场和发展·哈希算法·结构与算法
漫随流水2 小时前
leetcode算法(199.二叉树的右视图)
数据结构·算法·leetcode·二叉树