面试题29. 顺时针打印矩阵

//分圈方式打印矩阵,一个点代码左上,一个点代码右下,把第一圈剥离出来,然后打印,再去打印子矩阵
class
Solution { static int i = 0; int[] res = new int[0]; public int[] spiralOrder(int[][] matrix) { if(matrix == null || matrix.length == 0 ||matrix[0].length == 0) return res; int m = matrix.length; int n = matrix[0].length; res = new int [m*n]; //左上角点坐标 int lR = 0; int lC = 0; int tR = m-1; int tC = n-1; i = 0; while(lR <= tR && lC <= tC){ printMatrix(matrix,lR,lC,tR,tC); lR++; lC++; tR--; tC--; } return res; } //打印圈 void printMatrix(int[][] matrix,int lR,int lC,int tR,int tC){ //如果只有一行 lR == tR if(lR == tR){ while(lC <= tC){ res[i] = matrix[lR][lC]; i++; lC++; } return; } //如果只有一列 lC == tC else if(lC == tC){ while(lR <= tR){ res[i++] = matrix[lR][lC]; lR++; } return; } else{ //一圈,循环打印 int curR = lR; int CurC = lC; //打印行,列坐标++ while(CurC != tC){ res[i] = matrix[lR][CurC]; i++; CurC++; } //打印列,行坐标++ while(curR != tR){ res[i] = matrix[curR][tC]; i++; curR++; } //打印行,列坐标-- while(CurC != lC){ res[i] = matrix[tR][CurC]; i++; CurC--; } //打印列,行坐标-- while(curR != lR){ res[i] = matrix[curR][lC]; i++; curR--; } } } }

 

posted @ 2020-05-05 16:42  pengxiaowei  阅读(113)  评论(0)    收藏  举报