软件编程
位置:首页>> 软件编程>> java编程>> java实现转圈打印矩阵算法

java实现转圈打印矩阵算法

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

标签:java,打印矩阵

本文实例为大家分享了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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com