news 2026/5/7 19:51:48

020旋转图像

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
020旋转图像

旋转图像

题目链接:https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked

我的解答:

public void rotate(int[][] matrix) { int n = matrix.length; int temp, pre; int row=0, column, newRow=0, newColumn, tempRow; while(row<n/2){ for(column=row; column<n-1-row; column++){ temp = matrix[row][column]; newRow = column; newColumn = n-1-row; for(int i=0; i<4; i++){ pre = matrix[newRow][newColumn]; matrix[newRow][newColumn] = temp; temp = pre; tempRow = newRow; newRow = newColumn; newColumn = n-1-tempRow; } } row++; } }

分析:代码的时间复杂度为O(n^2),空间复杂度为O(1)。解题思路:从一个起始位置开始循环完成这组位置的交换,每一组只需4次交换,我们将矩阵分层,从外层开始向内层每层只需要n-1个位置(0~n-2列)进行循环交换即可完成这层所有数据的旋转。

看了官方题解后的解答:

//方法一:使用辅助数组 //时间复杂度:O(n^2) //空间复杂度:O(n^2) //经过观察发现,旋转90°后的矩阵,第i行成为了倒数第i列,利用这个规律可以使用辅助数组简单的完成旋转 public void rotate(int[][] matrix) { int n = matrix.length; int[][] matrix_new = new int[n][n]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { matrix_new[j][n - i - 1] = matrix[i][j]; } } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { matrix[i][j] = matrix_new[i][j]; } } } //方法二:原地旋转 //时间复杂度:O(n^2) //空间复杂度:O(1) public void rotate(int[][] matrix) { int n = matrix.length; int temp; for(int i=0; i<n/2; i++){ for(int j=0; j<(n+1)/2; j++){ temp = matrix[i][j]; matrix[i][j] = matrix[n-1-j][i]; matrix[n-1-j][i] = matrix[n-1-i][n-1-j]; matrix[n-1-i][n-1-j] = matrix[j][n-1-i]; matrix[j][n-1-i] = temp; } } } //方法三:用翻转代替旋转 //时间复杂度:O(n^2) //空间复杂度:O(1) public void rotate(int[][] matrix) { int n = matrix.length; int temp; //上下水平翻转 for(int i=0; i<n/2; i++){ for(int j=0; j<n; j++){ temp = matrix[i][j]; matrix[i][j] = matrix[n-1-i][j]; matrix[n-1-i][j] = temp; } } //按主对角线翻转 for(int i=0; i<n; i++){ for(int j=0; j<i; j++){ temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } }

分析:

​ 1、方法二的解题思路:结合方法一中发现的规律“旋转90°后的矩阵,第i行成为了倒数第i列”,我们可以得到每组数据(4个)的坐标,然后用一个临时变量temp保存其中一个数据即可完成这组数据的旋转变换,对于整个矩阵,我们只需要以矩阵左上角四分之一的数据为起点完成对应每组数据的旋转交换即可完成整个矩阵的旋转。

​ 2、方法三的解题思路:可从坐标变换公式(能推导出关键等式:matrix[row] [col] = matrix[col] [n-1-row])、几何直观理解、线性代数角度分别进行分析。

总结

  • 本题主要需要经过观察总结出关键等式:matrix[row] [col] = matrix[col] [n-1-row],寻找到能够满足这个等式的方法,或直接根据等式推断出每组数据的坐标然后进行旋转替换,或采用水平翻转+对角线翻转从而实现矩阵90°旋转。方法三的逻辑清晰,且更加通用。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 19:47:30

MultiButton状态转换图解:从按下到释放的完整生命周期

MultiButton状态转换图解&#xff1a;从按下到释放的完整生命周期 【免费下载链接】MultiButton Button driver for embedded system 项目地址: https://gitcode.com/gh_mirrors/mu/MultiButton MultiButton是一款适用于嵌入式系统的高效按钮驱动库&#xff0c;能够精准…

作者头像 李华
网站建设 2026/5/7 19:46:53

保姆级教程:用iNav 6.1.1配置H743飞控+双BMI270陀螺仪,解决蜂鸣器异响和黑匣子导出问题

深度解析iNav 6.1.1在H743飞控与双BMI270陀螺仪环境下的疑难排障指南 当H743飞控遇上双BMI270陀螺仪&#xff0c;这套本应带来极致飞行体验的硬件组合&#xff0c;却可能因为iNav固件的特殊兼容性问题让你陷入蜂鸣器长鸣与黑匣子数据导出的技术泥潭。作为经历过完整排障流程的实…

作者头像 李华
网站建设 2026/5/7 19:44:34

对比直接使用原厂API接入Taotoken在路由稳定性上的优势

理解聚合平台的路由稳定性价值 在构建依赖大模型能力的应用时&#xff0c;服务稳定性是开发者必须考量的核心工程因素。当直接对接单一厂商的API时&#xff0c;服务的可用性完全依赖于该厂商的基础设施状态。一旦该服务出现计划内维护或突发故障&#xff0c;调用方业务便会随之…

作者头像 李华
网站建设 2026/5/7 19:39:18

FLUX.1-Krea-Extracted-LoRA快速部署:平台镜像市场一键部署全流程

FLUX.1-Krea-Extracted-LoRA快速部署&#xff1a;平台镜像市场一键部署全流程 1. 模型介绍 FLUX.1-Krea-Extracted-LoRA 是一款基于 FLUX.1-dev 基础模型的真实感图像生成模型。这个 LoRA 风格权重是从 FLUX.1-Krea-dev 模型中提取的&#xff0c;专门为 FLUX.1-dev 设计。它通…

作者头像 李华