java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。


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;
			}
		}
		
	}
}

你可能感兴趣的:(java)