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

书籍转圈打印矩阵(8)0604

题目
给定一个整型矩阵matrix,请按照转圈的方式打印它。

例如:

1        2        3        4

5        6        7        8

9        10     11      12

13      14     15      16

打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

额外空间复杂度为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

如果能把这个子矩阵的外层转圈打印出来,那么在(tR,tC)=(0,0)、(dR,dC)=(3,3)时,打印的结果为:1,2,3,4,8,12,16,15,14,13,9,5。接下来令tR和tC加1,即(tR,tC)=(1,1),令dR和dC减1,(dR,dC)=(2,2),此时表示的子矩阵如下:

6        7

10     11

再把这个子矩阵转圈打印出来,结果为:6,7,11,10。把tR和tC加1,即(tR,tC)=(2,2),令dR和dC减1,即(dR,dC)=(1,1)。如果发现左上角坐标跑到了右下角坐标的右方或下方,整个过程就停止。已经打印的所有结果来连起来就是我们要求的打印结果。

public void spiralOrderPrint(int[][] matrix){int tR = 0;int tC = 0;int dR = matrix.length - 1 ;int dC = matrix[0].length - 1;while(tR < dR && tC <= dC ){printEdge(matrix,tR++,tC++,dR--,dC--);}
}public void printEdge(int[][] m,int tR,int tC,int dR,int dC){if(tR == dR){//子矩阵只有一行时for(int i = tC;i<=dC;i++){System.out.print(m[tR][i]+ " " );}}else if(tC == dC){//子矩阵只有一列时for(int i = tR; i<= dR;i++){System.out.print(m[i][tC] + " ");}}else{//一般情况int curC = tC;int curR = tR;while(curC != dC){System.out.print(m[tR][curC] + " ");curC++;}while(curR != dR){System.out.print(m[curR][dC] + " ");curR++;}while(curC != tC){System.out.print(m[dR][curC] + " ");curC--;}while(curR != tR){System.out.print(m[curR][tC] + " ");curR--;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/230380.html

相关文章:

  • 《PyTorch Hub:解锁深度学习模型的百宝箱》
  • x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
  • NeRF PyTorch 源码解读 - NDC空间
  • 6.04打卡
  • 使用 React Native 开发鸿蒙(HarmonyOS)运动健康类应用的系统化准备工作
  • Axios学习笔记
  • 《高等数学》(同济大学·第7版)第一章第七节无穷小的比较
  • 稻米分类和病害检测数据集(猫脸码客第237期)
  • Springfox 和 Knife4j 集成404 问题
  • el-input限制输入数字,输入中文后数字校验失效
  • 回归任务和分类任务损失函数详解
  • 采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境
  • el-table 树形数据,子行数据可以异步加载
  • 录制mp4
  • 【设计模式-4.8】行为型——中介者模式
  • OPENCV重点结构体Mat的讲解
  • C语言数据结构笔记3:Union联合体+结构体取8位Bool量
  • CentOS7关闭防火墙、Linux开启关闭防火墙
  • WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
  • OpenCV 键盘响应来切换图像
  • 实现C语言中srand()和rand()函数
  • .NET Core接口IServiceProvider
  • iptables实战案例
  • 【.net core】【watercloud】树形组件combotree导入及调用
  • Asp.net Core 通过依赖注入的方式获取用户
  • itop-3568开发板机器视觉opencv开发手册-图像绘制-画线
  • 【p2p、分布式,区块链笔记 MESH】 论文阅读 Thread/OpenThread Low-Power Wireless Multihop Net
  • Mac/iOS 如何解压 RAR 格式压缩包:常用工具与详细操作步骤
  • 【vue3学习】vue3入门
  • Flink进阶之路:解锁大数据处理新境界