java实现转圈打印矩阵算法
本文实例为大家分享了java实现转圈打印矩阵的具体代码,供大家参考,具体内容如下
给定一个整形矩阵Matrix,请按照顺时针方向转圈的方式,输入(打印)元素值。
例如:
1234
5678
9101112
13141516
输出结果为:12348121615141395671110
要求:额外空间复杂度为O(1)
JAVA代码如下:
packagecom.bean.algorithmexec;
publicclassMatrixDemo{
/*
*给定一个整形矩阵Matrix,请按照顺时针方向转圈的方式,输入(打印)元素值。
*例如:
*1234
*5678
*9101112
*13141516
*输出结果为:12348121615141395671110
*
*要求:额外空间复杂度为O(1)
**/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//初始化一个4*4的整形矩阵,从第一行第一列从左向右,第二行,第三行,直到第四行依次赋值1,2,...16.
int[][]matrixDemo=newint[4][4];
matrixDemo=createMatrix();
printMatrix(matrixDemo);
//转圈打印
spiralOrderPrint(matrixDemo);
}
privatestaticint[][]createMatrix(){
//TODOAuto-generatedmethodstub
intmatrix[][]=newint[4][4];
intk=1;
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
matrix[i][j]=k;
k++;
}
}
returnmatrix;
}
//顺序打印矩阵元素
privatestaticvoidprintMatrix(int[][]matrix){
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
System.out.print(matrix[i][j]+"\t");
}
System.out.println();
}
}
//转圈打印
privatestaticvoidspiralOrderPrint(int[][]matrix){
inttR=0;
inttC=0;
intdR=matrix.length-1;
intdC=matrix[0].length-1;
while(tR<=dR&&tC<=dC){
printEdge(matrix,tR++,tC++,dR--,dC--);
}
}
privatestaticvoidprintEdge(int[][]matrix,inttR,inttC,intdR,intdC){
//TODOAuto-generatedmethodstub
if(tR==dR){
//子矩阵只有一行时
for(inti=tC;i<=dC;i++){
System.out.print(matrix[tR][i]+"");
}
}elseif(tC==dC){
//子矩阵只有一列时
for(inti=tR;i<=dR;i++){
System.out.print(matrix[i][tC]+"");
}
}else{
//一般情况
intcurC=tC;
intcurR=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--;
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。