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

书籍将正方形矩阵顺时针转动90°(8)0605

题目
给定一个N x N的矩阵matrix,把这个矩阵调整成顺时针转动90°后的形式。

1        2        3        4

5        6        7        8

9       10      11      12

13      14      15      16

顺时针转动90°后为:

13        9        5        1

14        10      6        2

15        11      7        3

16        12       8        4

额外空间复杂度为O(1)。

解答

使用分圈处理的方式,在矩阵中用左上角的坐标(tR,tC)和右下角的坐标(dR,dC)就可以表示一个子矩阵。比如,题目中的矩阵,当(tR,tC)=(0,0)、(dR,dC)=(3,3)时,表示的子矩阵就是整个矩阵,那么这个子矩阵最外层的部分如下。

1        2        3        4        

5                             8

9                            12

13     14       15      16

在这个外围圈中,1,4,16,13为一组,然后让1占据4的位置,4占据16的位置,16占据13的位置,13占据1的位置,一组就调整完了。然后2,8,15,9一组,继续占据调整的过程,最后3,12,14,5为一组,继续占据调整的过程。然后(tR,tC)=(0,0)、(dR,dC)=(3,3)的子矩阵外层就调整完毕。接下来令tR和tC加1,即(tR,tC)=(1,1),令dR和dC减1,即(dR,dC)=(2,2),此时表示的子矩阵如下:

6        7        

10     11

这个外层只有一组,就是6,7,11,10,占据调整之后即可。所以,如果子矩阵的大小是M x M ,一共就有M-1组,分别进行占据调整即可。

public void totate(int[][] matrix){int tR = 0;int tC=0;int dR = matrix.length - 1;int dC = matrix[0].length - 1;while(tR < dR){rotateEdge(matrix,tR++,tC++,dR--,dC--);}
}public void rotateEdge(int[][] m,int tR, int tC, int dR, int dC){int times = dC - tC; times 就是总的组数int tmp = 0;for(int i = 0; i!= times;i++){//一次循环就是一组占据调整tmp = m[tR][tC + i];m[tR][tC+i] = m[dR - i][tC];m[dR - i][tC] = m[dR][dC-i];m[dR][dC - i] = m[tR + i][dC];m[tR + i][dC] = tmp;}}

http://www.lryc.cn/news/2402109.html

相关文章:

  • 【docker】容器技术如何改变软件开发与部署格局
  • C#抽象类深度解析 _ 核心特性与实战指南
  • 时序数据库IoTDB的UDF Sample算法在数据监控、故障预防的应用
  • Flask-SQLAlchemy使用小结
  • 深度学习和神经网络 卷积神经网络CNN
  • 用 NGINX 构建高效 POP3 代理`ngx_mail_pop3_module`
  • 解决:如何在Windows adb使用dmesg | grep检查内核日志
  • PlayWright | 初识微软出品的 WEB 应用自动化测试框架
  • Mac电脑_钥匙串操作选项变灰的情况下如何删除?
  • Git Patch 使用详解:生成、应用与多提交合并导出
  • 2025前端微服务 - 无界 的实战应用
  • Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
  • 【设计模式-4.8】行为型——中介者模式
  • SpringCloud-基于SpringAMQP实现消息队列
  • ObjectMapper 在 Spring 统一响应处理中的作用详解
  • H5移动端性能优化策略(渲染优化+弱网优化+WebView优化)
  • 【汇编逆向系列】二、函数调用包含单个参数之整型-ECX寄存器,LEA指令
  • 行列式的性质
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • Flask + ECharts+MYSQL物联网数字化大屏
  • 业务到解决方案构想
  • 数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)
  • vue3从入门到精通(基础+进阶+案例)
  • 【Linux 学习计划】-- 系统中进程是如何调度的(内核进程调度队列)
  • gemini和chatgpt数据对比:谁在卷性能、价格和场景?
  • C#、VB.net——如何设置窗体应用程序的外边框不可拉伸
  • 基于SpringBoot的房屋租赁系统的设计与实现(thymeleaf+MySQL)
  • Spring Boot统一功能处理深度解析
  • 世事无常,比较复杂,人可以简单一点
  • 使用 Docker Compose 安装 PostgreSQL 16