当前位置: 首页 > news >正文

LeetCode 48. 旋转图像

LeetCode 48. 旋转图像

问题描述

给定一个 n × n 的二维矩阵表示图像,要求将图像顺时针旋转 90 度。旋转必须在原地完成,即直接修改输入矩阵,不使用额外空间。

示例:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

解决思路:转置 + 镜像翻转

通过两个步骤实现原地旋转:

  1. 矩阵转置:沿主对角线翻转元素
    matrix[i][j]matrix[j][i]
  2. 水平镜像翻转:每行左右翻转元素
    matrix[i][j]matrix[i][n-1-j]

数学证明

  • 顺时针旋转公式:matrix[i][j] → matrix[j][n-1-i]
  • 转置后:matrix[i][j] → matrix[j][i]
  • 镜像翻转后:matrix[j][i] → matrix[j][n-1-i]

C++ 代码实现
class Solution {
public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();// 1. 矩阵转置 (沿主对角线翻转)for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {swap(matrix[i][j], matrix[j][i]);}}// 2. 水平镜像翻转 (每行左右翻转)for (int i = 0; i < n; ++i) {int left = 0, right = n - 1;while (left < right) {swap(matrix[i][left], matrix[i][right]);++left;--right;}}}
};

关键点解析
  1. 转置操作

    • 遍历上三角区域(避免重复交换)
    • i0n-1ji+1n-1
    • 交换 matrix[i][j]matrix[j][i]
  2. 镜像翻转

    • 对每行用双指针法(leftright
    • 交换行首尾元素并向中间移动
  3. 时间复杂度:O(n²)

    • 转置:O(n²/2) ≈ O(n²)
    • 镜像:O(n²/2) ≈ O(n²)
  4. 空间复杂度:O(1)
    完全原地操作


示例推演

3×3 矩阵为例:

初始矩阵:
1 2 3
4 5 6
7 8 9步骤1:转置(沿主对角线翻转):
1 4 7
2 5 8
3 6 9步骤2:水平镜像(每行左右翻转):
7 4 1  ← 翻转 [1,4,7] → [7,4,1]
8 5 2  ← 翻转 [2,5,8] → [8,5,2]
9 6 3  ← 翻转 [3,6,9] → [9,6,3]

最终得到顺时针旋转 90 度的结果:

7 4 1
8 5 2
9 6 3

此方法简洁高效,严格满足原地操作要求,是旋转矩阵的最优解法。

http://www.xdnf.cn/news/1048591.html

相关文章:

  • 算法导论第六章:堆排序与优先队列的艺术
  • MySQL进阶篇
  • Redis中的set底层实现
  • LeetCode 高频 SQL 50 题(基础版)之 【子查询】· 下
  • PMP考试中的100个关键点
  • Some chunks are larger than 500 KiB after minification. Consider
  • Java中如何使用lambda表达式分类groupby
  • 面经的疑难杂症
  • 『uniapp』onThemeChange监听主题样式,动态主题不正确生效,样式被覆盖的坑
  • 如何提高电脑打字速度?
  • 前端错误捕获
  • Vue3相关知识3
  • Mysql基础入门\期末速成
  • 微信小程序 路由跳转
  • web3-区块链的技术安全/经济安全以及去杠杆螺旋(经济稳定)
  • 【Bug】--docker的wsl版本问题
  • ELK日志文件分析系统——补充(B——Beats)
  • ELK日志文件分析系统——K(Kibana)
  • Unity基础-Line Renderer
  • 【NOI 专题训练】概率期望
  • [windows工具]PDFOCR识别重命名工具1.3 版本使用教程及注意事项
  • selenium点击元素出现的obscure问题
  • Mybatis-动态SQL、 <if>、<where>
  • MySQL常用函数详解之数值函数
  • Vue3优质动画库推荐
  • 分类预测 | Matlab基于AOA-VMD-GRU故障诊断分类预测
  • 36-Oracle Statistics Gathering(统计信息收集)
  • [windows工具]批量OCR指定区域图片自动识别内容重命名软件1.3版本使用教程及注意事项
  • 幂级数 (0,R); R ;(R,+oo)
  • pyhton基础【10】容器介绍五