* 【题目】 给定一个整型矩阵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 class 转圈打印矩阵 { public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 }}; print(matrix); } private static void print(int[][] matrix) { int a = 0; //行 int b = 0; //列 int c = matrix.length-1; //行 int d = matrix[0].length-1; //列 while(a <= c && b <= d) { printedge(matrix,a++,b++,c--,d--); } } private static void printedge(int[][] matrix, int a, int b, int c, int d) { if(a == c) { //只有一行 for(int i = b;i<=d;i++) { System.out.print(matrix[a][i]+" "); } }else if(b == d) { //只有一列 for(int i =a;i<=c;i++) { System.out.print(matrix[i][b]+" "); } }else { int i = b; while(i < d) { System.out.print(matrix[a][i++]+" "); } i = a; while(i < c) { System.out.print(matrix[i++][d]+" "); } i = d; while(i > b) { System.out.print(matrix[c][i--]+" "); } i = c; while(i > a) { System.out.print(matrix[i--][b]+" "); } } } }