题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
/**
* 顺时针打印矩阵
*
* @param matrix
* @return
*/
public ArrayList<Integer> printMatrix(int[][] matrix) {
int x = 0;
int y = 0;
int state = 0;
int xlength = matrix[0].length;
int ylength = matrix.length;
int size = xlength * ylength;
int ystart = 0;
int xstart = 0;
int yend = ylength - 1;
int xend = xlength - 1;
ArrayList<Integer> list = new ArrayList<>();
while (list.size() < size) {
if (state == 0) {
//→
list.add(matrix[y][x++]);
if (x > xend) {
x = xend;
ystart++;
y++;
state = 1;
continue;
}
} else if (state == 1) {
//↓
list.add(matrix[y++][x]);
if (y > yend) {
y = yend;
xend--;
x--;
state = 2;
continue;
}
} else if (state == 2) {
//←
list.add(matrix[y][x--]);
if (x < xstart) {
x = xstart;
yend--;
y--;
state = 3;
continue;
}
} else if (state == 3) {
//↑
list.add(matrix[y--][x]);
if (y < ystart) {
y = ystart;
x++;
state = 4;
xstart++;
continue;
}
} else {
//参数初始化
state = 0;
}
}
return list;
}