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--; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。