给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
例:
首先我们分析一下,画一个简单的图,图有点丑陋,用手画的
我们遍历的时候也就这四个方向,横着遍历到(未遍历的)头,然后向下,向左,向右,如果还有元素则重复动作,如此
public ArrayList<Integer> printMatrix(int[][] matrix){
ArrayList<Integer> ret = new ArrayList<>();
if(matrix.length == 0) {//判空
return ret;
}
int width = 0;//定义横向的遍历值
int height = 0;//定义竖向的遍历值
int maxHeight = matrix.length - 1;//定义横向遍历最大值
int maxWidth = matrix[0].length - 1;//定义横向遍历最大值
//此时最大值都为最大
while(width <= maxWidth && height <= maxHeight) {
for(int i = width; i <= maxWidth; i ++) //向右遍历
ret.add(matrix[height][i]);
//因为向右遍历已经遍历一个了所以这里加一
for(int i = height + 1; i <= maxHeight; i ++) //向下遍历
ret.add(matrix[i][maxWidth]);
if(height != maxHeight)//倘若高没遍历完
for(int i = maxWidth - 1; i >= width; i --) //向左遍历
ret.add(matrix[maxHeight][i]);
if(width != maxWidth)//倘若宽没遍历完
for(int i = maxHeight - 1; i > height; i --)
ret.add(matrix[i][width]);
width ++; maxWidth --; height ++; maxHeight --;
}
return ret;
}