java实现转圈打印矩阵算法

作者:梅森上校 时间:2022-11-27 06:38:21 

本文实例为大家分享了java实现转圈打印矩阵的具体代码,供大家参考,具体内容如下

给定一个整形矩阵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)

JAVA代码如下:


package com.bean.algorithmexec;

public class MatrixDemo {

/*
 * 给定一个整形矩阵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)
 * */

public static void main(String[] args) {
 // TODO Auto-generated method stub

//初始化一个 4*4的整形矩阵,从第一行第一列从左向右,第二行,第三行,直到第四行依次赋值 1,2,...16.
 int[][] matrixDemo=new int[4][4];
 matrixDemo=createMatrix();
 printMatrix(matrixDemo);

//转圈打印
 spiralOrderPrint(matrixDemo);

}

private static int[][] createMatrix() {
 // TODO Auto-generated method stub
 int matrix[][]=new int[4][4];
 int k=1;
 for(int i=0;i<4;i++) {
  for(int j=0;j<4;j++) {
   matrix[i][j]=k;
   k++;
  }
 }

return matrix;
}

//顺序打印矩阵元素
private static void printMatrix(int[][] matrix) {
 for(int i=0;i<4;i++) {
  for(int j=0;j<4;j++) {
   System.out.print(matrix[i][j]+"\t");
  }
  System.out.println();
 }

}

//转圈打印
private static 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--);
 }
}

private static void printEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
 // TODO Auto-generated method stub
 if(tR==dR) {
  //子矩阵只有一行时
  for(int i=tC;i<=dC;i++) {
  System.out.print(matrix[tR][i]+" ");
  }

}else if(tC==dC) {
  //子矩阵只有一列时
  for(int i=tR;i<=dR;i++){
   System.out.print(matrix[i][tC]+" ");
  }

}else {
  //一般情况
  int curC=tC;
  int curR=tR;
  while(curC!= dC) {
   System.out.print(matrix[tR][curC]+" ");
   curC++;
  }

while(curR!= dR) {
   System.out.print(matrix[curR][dC]+" ");
   curR++;
  }

while(curC!= tC) {
   System.out.print(matrix[dR][curC]+" ");
   curC--;
  }

while(curR!= tR) {
   System.out.print(matrix[curR][tC]+" ");
   curR--;
  }
 }
}

}

来源:https://blog.csdn.net/seagal890/article/details/79124067

标签:java,打印矩阵
0
投稿

猜你喜欢

  • Unity实现卡片循环滚动效果的示例详解

    2022-06-06 16:04:47
  • Springboot整合pagehelper分页功能

    2021-12-14 15:53:48
  • C# 常用日期时间函数(老用不熟)

    2021-08-21 10:12:18
  • Android通过自定义View实现随机验证码

    2022-10-24 07:16:19
  • Android实现图片上传蒙层进度条

    2022-05-06 04:35:43
  • 设计模式之责任链模式_动力节点Java学院整理

    2022-03-08 11:24:14
  • 详解Java实现单例的五种方式

    2021-06-11 03:54:03
  • SpringCloud Eureka的使用教程

    2022-03-23 22:30:59
  • 解决logback-classic 使用testCompile的打包问题

    2021-07-01 08:16:50
  • C#使用HtmlAgilityPack抓取糗事百科内容实例

    2022-01-16 10:45:16
  • 新的Java访问mysql数据库工具类的操作代码

    2023-04-05 16:54:58
  • idea使用外置tomcat配置springboot详细步骤

    2023-11-20 03:56:49
  • 实例讲解JAVA设计模式之备忘录模式

    2023-08-29 16:31:19
  • Android中EditText+Button组合导致输入板无法收起的原因分析及解决办法

    2021-10-01 11:27:51
  • JAVA HashMap详细介绍和示例

    2023-04-07 00:17:43
  • android AlertDialog多种使用方法详解

    2021-09-14 05:57:10
  • 基数排序简介及Java语言实现

    2021-10-06 01:15:13
  • 详解Java分布式系统中一致性哈希算法

    2022-10-11 18:01:05
  • C#实现对AES加密和解密的方法

    2021-07-27 16:34:24
  • Scala异常处理的方法深入分析

    2022-01-09 19:50:35
  • asp之家 软件编程 m.aspxhome.com