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

【LeetCode热题100道笔记】旋转图像

题目描述

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:
在这里插入图片描述
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
在这里插入图片描述输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

提示:

n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

思考一(转置翻转)

先转置矩阵,再交换矩阵列

代码

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var rotate = function(matrix) {const n = matrix.length;for (let i = 0; i < n; i++) {for (let j = 0; j < n; j++) {if (i <= j) {[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];}}}for (let i = 0; i < n; i++) {for (let j = 0; j < Math.floor(n/2); j++) {[matrix[i][j], matrix[i][n-j-1]] = [matrix[i][n-j-1], matrix[i][j]];}    }
};

思考二

分层旋转(从外到内逐层处理),核心是通过 “临时变量” 循环交换每一层的 4 个对应元素,同样能实现原地旋转。
将n×n矩阵看作“嵌套的正方形环”,从最外层(第0层)到最内层(第k层,k = Math.floor(n/2)),逐层处理每个环的元素:

  • 对于第 layer 层(从0开始),该层的“边长”为 len = n - 2*layer,需要处理 len-1 组元素(每组4个元素对应旋转后的位置)。

  • 每组元素的坐标规律(以第 layer 层为例):

    • 左上角元素:(layer, layer + offset) → 旋转后到右上角;
    • 右上角元素:(layer + offset, n-1 - layer) → 旋转后到右下角;
    • 右下角元素:(n-1 - layer, n-1 - layer - offset) → 旋转后到左下角;
    • 左下角元素:(n-1 - layer - offset, layer) → 旋转后到左上角;
    • offset 为每组的偏移量,从0到 len-2)。
  • 时间复杂度O(n2)O(n^2)O(n2)

代码

const n = matrix.length;// 从外到内逐层处理,共 Math.floor(n/2) 层for (let layer = 0; layer < Math.floor(n / 2); layer++) {const len = n - 2 * layer; // 当前层的边长const last = n - 1 - layer; // 当前层的最后一个索引(行/列相同)// 处理当前层的每一组4个元素(共 len-1 组)for (let offset = 0; offset < len - 1; offset++) {// 1. 保存左上角元素(临时变量)const temp = matrix[layer][layer + offset];// 2. 左下角 → 左上角matrix[layer][layer + offset] = matrix[last - offset][layer];// 3. 右下角 → 左下角matrix[last - offset][layer] = matrix[last][last - offset];// 4. 右上角 → 右下角matrix[last][last - offset] = matrix[layer + offset][last];// 5. 左上角(临时)→ 右上角matrix[layer + offset][last] = temp;}}

文章转载自:

http://TxF4qLsg.gynLs.cn
http://9ryI7R6r.gynLs.cn
http://0zMhQYZO.gynLs.cn
http://MLRnwi1B.gynLs.cn
http://qp6csC5k.gynLs.cn
http://abHxistS.gynLs.cn
http://y09ClPOJ.gynLs.cn
http://YBHVRvE8.gynLs.cn
http://I2v8Q7iK.gynLs.cn
http://8FcLuFJD.gynLs.cn
http://T4FWfNVb.gynLs.cn
http://lyjRlLqC.gynLs.cn
http://KUhcaqKv.gynLs.cn
http://ZpV6HfkI.gynLs.cn
http://glJ3pJ94.gynLs.cn
http://3n0MPdZo.gynLs.cn
http://b2RVq53Q.gynLs.cn
http://7t4XPXlC.gynLs.cn
http://D3IjktN7.gynLs.cn
http://s3aUcXYD.gynLs.cn
http://kAQF1HvN.gynLs.cn
http://zahBLgyq.gynLs.cn
http://NdNLzk1l.gynLs.cn
http://XCVVGU2D.gynLs.cn
http://vibWjpRO.gynLs.cn
http://1x7hrz93.gynLs.cn
http://jVvKR14s.gynLs.cn
http://nz5BcGv5.gynLs.cn
http://IMZXhvdA.gynLs.cn
http://yGlJJvOc.gynLs.cn
http://www.dtcms.com/a/366223.html

相关文章:

  • 从零开始的云计算生活——第五十八天,全力以赴,Jenkins部署
  • [Linux] Linux标准块设备驱动详解:从原理到实现
  • 如何将两个网段互相打通
  • ⸢ 肆 ⸥ ⤳ 默认安全:安全建设方案 ➭ b.安全资产建设
  • 算法模板(Java版)_字符串、并查集和堆
  • 云数据库服务(参考自腾讯云计算工程师认证课程)更新中......
  • 如何在Linux上部署1Panel面板并远程访问内网Web端管理界面
  • vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储
  • [数据结构] 链表
  • 大学园区二手书交易平台(代码+数据库+LW)
  • CASToR 软件编译(使用 Makefile )
  • 惊!printf 不往屏幕输?都是 fd 在搞鬼!爆肝拆解 Linux 文件描述符 + 重定向底层,学会直接在终端横着走
  • NIPT 的时点选择与胎儿的异常判定
  • Spring Boot 启动卡死:循环依赖与Bean初始化的深度分析
  • Web与Nginx网站服务
  • 如何导出 手机中的APK并查看清单文件
  • 《R for Data Science (2e)》免费中文翻译 (第7章) --- Data import(1)
  • 2025高教社杯国赛数学建模选题建议+初步分析
  • 企业微信SCRM工具推荐:微盛AI·企微管家为什么是首选?
  • 直接让前端请求代理到自己的本地服务器,告别CV报文到自己的API工具,解放双手
  • 国产化Excel处理组件Spire.XLS教程:Java 向 Excel 写入数据的3种高效方法(含代码示例)
  • 8051单片机-成为点灯大师
  • 单片机实现分页显示环形更新的历史数据
  • 详细讲解pyspark中dsl格式进行大数据开发中的的所有编程情况
  • 大数据毕业设计选题推荐-基于大数据的懂车帝二手车数据分析系统-Spark-Hadoop-Bigdata
  • uni 拍照上传拍视频上传以及相册
  • React 中的 HOC 和 Hooks
  • 大数据毕业设计选题推荐-基于大数据的儿童出生体重和妊娠期数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 【C++练习】06.输出100以内的所有素数
  • 结合prompt源码分析NodeRAG的build过程