/** * @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; } }
来源:https://www.cnblogs.com/Allen-win/p/8691578.html