java实现转圈打印矩阵算法

网友投稿 243 2023-07-09

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[0http://].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--;

}

}

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java顺时针打印矩阵
下一篇:掷6面骰子6000次每个点数出现的概率
相关文章

 发表评论

暂时没有评论,来抢沙发吧~