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

 

 

/**
 * @Author: Allen
 * @Version:v1.00
 * @CreateData:2018年4月2日 上午9:31:45
 *输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
 *例如,如果输入如下矩阵:
 *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.
 */
import
java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { if(matrix==null){ return null; } ArrayList<Integer> list=new ArrayList<Integer>(); int rows = matrix.length; int colums = matrix[0].length; int start=0; while(colums>start*2 && rows > start*2){ list.addAll(printMatrixInCircle(matrix,rows,colums,start)); start++; } return list; } private ArrayList<Integer> printMatrixInCircle(int [][] matrix,int rows, int colums,int start){ ArrayList<Integer> list = new ArrayList<Integer>(); int endX=colums-start-1; int endY=rows-start-1; //1.从左向右打印一行 for(int i=start; i<=endX; i++){ Integer num=matrix[start][i]; list.add(num); } //2.从上到下打印一列 if(endY>start){ for(int i=start+1; i<=endY; i++){ Integer num = matrix[i][endX]; list.add(num); } } //3.从右到左打印一行 if(endY>start && endX>start){ for(int i=endX-1; i>=start; i--){ Integer num = matrix[endY][i]; list.add(num); } } //4.从下到上打印一列 if(endY-1>start && endX>start){ for(int i=endY-1; i > start; i--){ Integer num = matrix[i][start]; list.add(num); } } return list; } }

 

posted @ 2018-04-02 11:21  Allen101  阅读(146)  评论(0编辑  收藏  举报