题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
题目分析
我们可以将矩阵看成由若干个圈组成,每转一圈就是一层,依次转完所有圈,就得到了二维数组所有的数。
Java实现
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result=new ArrayList<Integer>(); //将顺时针输出的矩阵元素都存放在结果列表里
if(matrix.length==0) return result; //如果矩阵行数为0,说明是空矩阵,则直接返回空列表
int row=matrix.length,column=matrix[0].length; //初始化矩阵行数和列数
if(column==0) return result; //如果矩阵行数不为0,矩阵的列数为0,意味着矩阵由空元素组成,依然返回空列表
/*
* layers是循环遍历的层数,由行和列的较小值决定,-1是为了考虑较小值为奇数的情况,
* 除以2是因为每次循环都会因顶部从左到右和底部从右到左而用掉2行,所以只取一半,
* +1是为了补偿之前-1造成的奇数情况下的0.