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]