public class PrintMatrixClockwisely { /** * Q51.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 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。 */ public enum Direction{ left,right,up,down, } public static void main(String[] args) { int[][] matrix= { { 1, 2, 3, 4, 5}, { 6, 7, 8, 9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}, }; printMatrixClockwisely(matrix); } /* * 思路比较直观, * 从左往右打印,到了右边界则向下,到了下边界就往左,到了左边界就往上。 * 注意结束条件以及打印的时机 */ public static void printMatrixClockwisely(int[][] matrix){ int rowLen=matrix.length; int columnLen=matrix[0].length; Direction direction=Direction.right; int upBound=0; int downBound=rowLen-1; int leftBound=0; int rightBound=columnLen-1; int row=0; int column=0; while(true){ System.out.print(matrix[row][column]+" "); //2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13 if(upBound==downBound&&leftBound==rightBound){ break; } switch (direction){ case right: if(column<rightBound){ ++column; }else{ ++row; direction=Direction.down; ++upBound; } break; case down: if(row<downBound){ ++row; }else{ --column; direction=Direction.left; --rightBound; } break; case up: if(row>upBound){ --row; }else{ ++column; direction=Direction.right; ++leftBound; } break; case left: if(column>leftBound){ --column; }else{ --row; direction=Direction.up; --downBound; } break; default:break; } } } }