Hot100:搜索二维矩阵 II(Search a 2D Matrix II)右上角阶梯搜索 O(m+n) ACERS 解析

副标题 / 摘要 这题的关键不是二分,而是利用“行列都单调”的结构,从**右上角(或左下角)**像走楼梯一样移动:每一步都能排除一整行或一整列,从而把复杂度降到 O(m+n)。 预计阅读时长:10~13 分钟 标签:Hot100、矩阵、单调性、指针 SEO 关键词:搜索二维矩阵 II, 单调矩阵查找, 右上角搜索, O(m+n), LeetCode 240 元描述:在行列均升序的矩阵中搜索 target:从右上角阶梯式移动,每步排除一行或一列,O(m+n)/O(1) 解法与多语言实现。 目标读者 刷 Hot100,希望掌握“二维单调结构剪枝”模板的学习者 写过二分但总在二维问题里迷路的中级开发者 在工程中需要查询/裁剪/定位二维单调表格的工程师 背景 / 动机 二维表在工程里很常见:费率表、校准表、阈值表、网格配置表等。 当一个表满足“横向递增 + 纵向递增”的 二维单调(monotone matrix) 特性时,很多查询不需要 O(mn) 全扫。 这题就是经典入门:用单调性做剪枝,把搜索降成线性级别。 核心概念 概念 含义 在本题的作用 二维单调矩阵 行升序、列升序 保证“比较一次就能排除一行/列” 右上角起点 右上角元素:左边更小、下边更大 决策方向天然明确 剪枝 排除不可能包含 target 的行/列 每步减少搜索空间 O(1) 额外空间 只用 i/j 指针 适合大矩阵与性能场景 A — Algorithm(题目与算法) 题目还原 给定一个 m x n 矩阵 matrix 和一个目标值 target。矩阵满足: ...

2026年2月1日 · 7 分钟 · map[name:Jeanphilo]

Hot100:螺旋矩阵(Spiral Matrix)边界收缩模拟 ACERS 解析

副标题 / 摘要 “顺时针螺旋遍历”看似只是打印顺序,实则考验你对边界与循环不变量的掌控。本文用 ACERS 结构给出可直接复用的边界收缩模板,并给出多语言可运行实现。 预计阅读时长:12~15 分钟 标签:Hot100、矩阵、模拟、边界收缩 SEO 关键词:Hot100, Spiral Matrix, 螺旋矩阵, 顺时针螺旋遍历, 边界收缩, LeetCode 54 元描述:用边界收缩法输出矩阵的顺时针螺旋序列,包含推导、工程场景、复杂度对比与多语言代码。 目标读者 正在刷 Hot100、想把“矩阵模拟题”沉淀成模板的同学 对边界条件容易写错、希望提升代码稳健性的中级开发者 做可视化/栅格数据处理/网格路径相关任务的工程师 背景 / 动机 矩阵类题目最容易“写得出来,但写不对”: 多一层循环、多一个边界判断,就可能在单行/单列、奇偶层数时出错或重复输出。 螺旋遍历是一个很好的训练题:它逼你把 循环不变量(哪些行列还没被处理)和 边界收缩(每处理完一条边就把边界往里缩)描述清楚,代码才能既短又不炸。 核心概念 边界(Boundaries):用 top/bottom/left/right 表示当前还未处理的矩形外框 层(Layer):每次循环处理一圈外框(上边、右边、下边、左边) 收缩(Shrink):每处理完一条边就移动对应边界:top++、right--、bottom--、left++ 循环不变量:始终保证未输出区域是 top..bottom × left..right A — Algorithm(题目与算法) 题目还原 给你一个 m 行 n 列的矩阵 matrix,请按照 顺时针螺旋顺序,返回矩阵中的所有元素。 输入输出 名称 类型 描述 matrix int[][] m × n 的矩阵 返回 int[] 按顺时针螺旋顺序输出的所有元素 示例 1(自拟) matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 输出: [1, 2, 3, 6, 9, 8, 7, 4, 5] 示例 2(自拟) matrix = [ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] 输出: [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] C — Concepts(核心思想) 思路推导:从“标记访问”到“边界收缩” 朴素思路:方向数组 + visited 标记 从 (0,0) 出发按右/下/左/上转向;走到越界或已访问就转向。 ...

2026年2月1日 · 9 分钟 · map[name:Jeanphilo]

Hot100:旋转图像(Rotate Image)转置 + 行反转实现原地 90 度旋转 ACERS 解析

副标题 / 摘要 旋转图像的核心不是“算新坐标”,而是把映射拆成两个可原地执行的操作:转置(transpose)+ 反转每一行(reverse rows)。本文按 ACERS 模板给出从朴素解到原地解的推导、常见坑与多语言可运行实现。 预计阅读时长:10~14 分钟 标签:Hot100、矩阵、原地、转置 SEO 关键词:旋转图像, Rotate Image, 原地旋转 90 度, 转置, 行反转, LeetCode 48 元描述:顺时针原地旋转 n×n 矩阵 90 度:转置 + 行反转模板解;含思路推导、复杂度对比、工程迁移与多语言实现。 目标读者 刷 Hot100,想把“矩阵原地技巧”整理成可复用模板的学习者 需要在工程里处理二维网格(图像/棋盘/地图/热力图)变换的开发者 对空间敏感,希望避免额外矩阵拷贝的工程师 背景 / 动机 在很多场景里,“旋转”是高频操作: 图像增强、棋盘/地图方向变换、传感器方向校正、UI 表格视图旋转等。 如果每次旋转都新建一个矩阵,空间开销是 O(n^2),在大矩阵或高频调用时会非常“吃内存”,甚至触发 GC/内存抖动。 因此这题的关键约束是:必须原地(in-place)完成 90 度旋转。 核心概念 概念 含义 为什么重要 坐标映射 旋转后的新坐标与旧坐标之间的关系 让你知道“最终要变成什么” 转置(Transpose) matrix[i][j] 与 matrix[j][i] 交换 原地可做、且能把行列关系对齐 行反转(Reverse Row) 把每一行左右翻转 与转置组合后刚好等价于顺时针 90 度 原地算法 只用常数额外空间完成变换 适合大矩阵与性能场景 A — Algorithm(题目与算法) 题目还原 给定一个 n x n 的二维矩阵 matrix 表示图像。请将图像 顺时针旋转 90 度。 要求 原地修改 matrix,不要使用另一个矩阵。 ...

2026年2月1日 · 7 分钟 · map[name:Jeanphilo]

矩阵置零:用首行首列做标记实现原地 O(1) 空间(LeetCode 73)

副标题 / 摘要 “矩阵置零”是典型的二维标记传播问题:某个位置为 0,会影响整行整列。本文用 ACERS 结构讲清楚为什么不能直接改、如何用首行首列做标记实现原地 O(1) 额外空间,并给出多语言可运行代码。 预计阅读时长:12~15 分钟 标签:矩阵、原地算法、标记位 SEO 关键词:矩阵置零, 原地 O(1) 空间, 首行首列标记, LeetCode 73 元描述:用首行首列作标记位,原地将含 0 的行与列全部置零;包含推导、复杂度对比、工程迁移与多语言实现。 目标读者 刷 LeetCode,想把“二维数组原地技巧”沉淀成稳定模板的同学 需要在工程里做二维网格/表格/矩阵数据清洗与传播标记的开发者 对空间优化敏感(嵌入式、性能场景、内存受限)的工程师 背景 / 动机 二维数据在工程里到处都是:表格、图像、传感器网格、关联矩阵…… “某个单元格触发规则 -> 影响整行整列”这种联动,本质就是 行列传播(row/col propagation)。 这题额外要求“原地”,逼你掌握一个非常通用的技巧:用数据结构本身的某些位置当作标记位,避免额外内存。 核心概念 传播标记:发现 0 后,不是立刻改整行整列,而是先记录“哪些行/列要被清零” 原地(in-place):只允许 O(1) 额外空间(不算输入矩阵本身) 标记位复用:把 matrix[0][j] 当作“第 j 列要清零”的标记,把 matrix[i][0] 当作“第 i 行要清零”的标记 首行/首列特判:首行/首列既是数据又是标记位,因此需要单独用两个布尔量记录它们是否本来就该清零 A — Algorithm(题目与算法) 题目还原 给定一个 m x n 矩阵 matrix:如果某个元素为 0,则将该元素所在的 整行 与 整列 的所有元素都设置为 0。 要求 原地修改 matrix(通常不需要返回值)。 ...

2026年2月1日 · 10 分钟 · map[name:Jeanphilo]