给你一个整形矩阵matrix,请按照转圈的方式打印它
例如
input:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
output 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
要求
额外空间复杂度O(1)
设计一个函数,只打印最外圈,这里取最外圈的左上角顶点和左下角顶点的坐标,表示一个子矩阵,按照从外到里的顺序打印每个子矩阵就可以了。
public 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<=tC){
printEdge(matrix,tR++,tC++,dR--,dC--);
}
}
public void printEdge(int[][] m,int tR,int tC,int dR,int dC){
if(tR==dR){ //子矩阵只有一行
for(int i=tC;i<=dC;i++){
System.out.println(m[tR][i]+" ");
}
}else if(tC==dC){ //子矩阵只有一列时
for(int i=tR;i<=dR;i++){
System.out.println(m[i][tC]+" ");
}
}else{
int curC = tC;
int curR = tR;
while(curC!=dC){
System.out.println(m[tR][curC]+" ");
curC++;
}
while(curR!=dR){
System.out.println(m[curR][dC]+" ");
curR++;
}
while(curC!=tc){
System.out.println(m[dR][curC]+" ");
curC--;
}
while(curR!=tR){
System.out.println(m[curR][tC]+" ");
curR--;
}
}
}