【LeetCode】每日一题 2024_11_15 最少翻转次数使二进制矩阵回文 I(模拟、矩阵遍历(竖着遍历))

前言

每天和你一起刷 LeetCode 每日一题~

决定在前言里面加上新内容!新增模块:"本期看点"

本期看点:如何竖着遍历矩阵?

LeetCode 启动!

题目:最少翻转次数使二进制矩阵回文 I

代码与解题思路

先读题:题目要求我们找到把矩阵的行或者列变成回文形式的最小次数

首先需要思考的是,怎么样计算把矩阵的行或列变成回文需要的次数?仔细想想可以知道,只有一种情况,那就是遍历矩阵的时候,发现每行/列第一个元素和最后一个元素值不同就需要进行一次转换,次数++ . . . 以此类推

即,我们只需要遍历一遍矩阵就能得到结果,那将行变成回文和列变成回文的情况都遍历一遍,取他们的最小值就能得到题目要求的结果啦,代码如下:

go 复制代码
func countGoodNodes(edges [][]int) (ans int) {
func minFlips(grid [][]int) int {
    // 计算把行都变成回文的次数和把列都变成回文的次数都算出来,取最小即可
    n, m := len(grid), len(grid[0])

    // 行的回文次数
    cntRow := 0
    for _, row := range grid {
        for j := 0; j < m/2; j++ {
            if row[j] != row[m-1-j] {
                cntRow++
            }
        }
    }

    // 列的回文次数
    cntCol := 0
    for j := 0; j < m; j++ {
        for i, row := range grid[:n/2] {
            if row[j] != grid[n-1-i][j] {
                cntCol++
            }
        }
    }

    return min(cntRow, cntCol)
}

行的遍历比较简单,直接从左往右,从上到下的正常顺序遍历即可,我们都写过很多了,但竖着遍历直到现在依然让我挺难受的

竖着遍历的核心在于,让 j 也就是二维数组的第二个下标在第一层循环,而第一个下标在第二层循环,但是两个下标本身的位置不变,假如不用语法糖,纯净的遍历代码如下:

go 复制代码
func minFlips(grid [][]int) int {
    // 计算把行都变成回文的次数和把列都变成回文的次数都算出来,取最小即可
    n, m := len(grid), len(grid[0])

    // 行的回文次数
    cntRow := 0
    for i := 0; i < n; i++ {
        for j := 0; j < m/2; j++ {
            if grid[i][j] != grid[i][m-1-j] {
                cntRow++
            }
        }
    }

    // 列的回文次数
    cntCol := 0
    for j := 0; j < m; j++ {
        for i := 0; i < n/2; i++ {
            if grid[i][j] != grid[n-1-i][j] {
                cntCol++
            }
        }
    }

    return min(cntRow, cntCol)
}

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
Young_Zn_Cu21 分钟前
LeetCode刷题记录(持续更新中)
算法·leetcode
天选之女wow26 分钟前
【代码随想录算法训练营——Day31】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
算法·leetcode·贪心算法
lixinnnn.30 分钟前
贪心:火烧赤壁
数据结构·c++·算法
小小前端_我自坚强33 分钟前
前端算法相关详解
前端·算法
前端 贾公子1 小时前
《Vuejs设计与实现》第 5 章(非原始值响应式方案)下 Set 和 Map 的响应式代理
数据结构·算法
WWZZ20252 小时前
ORB_SLAM2原理及代码解析:SetPose() 函数
人工智能·opencv·算法·计算机视觉·机器人·自动驾驶
小马学嵌入式~3 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
青岛少儿编程-王老师3 小时前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一人の梅雨3 小时前
1688 拍立淘接口深度开发:从图像识别到供应链匹配的技术实现
人工智能·算法·计算机视觉
Miraitowa_cheems4 小时前
LeetCode算法日记 - Day 64: 岛屿的最大面积、被围绕的区域
java·算法·leetcode·决策树·职场和发展·深度优先·推荐算法