默认从(0,0)位置开始,pos控制遍历的方向,进行对应的处理,当到达边界时,对相关边界字段进行更新。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0) {
return list;
}
int rows = matrix.length;
int cols = matrix[0].length;
int pos = 0;
int i = 0, j = 0;
int rowTop = 0, rowBottom = rows - 1, colLeft = 0, colRight = cols - 1;
while (rowTop <= rowBottom && colLeft <= colRight) {
list.add(matrix[i][j]);
switch(pos) {
case 0:
if (j == colRight) {
pos = 1;
rowTop++;
i++;
} else {
j++;
}
break;
case 1:
if (i == rowBottom) {
pos = 2;
colRight--;
j--;
} else {
i++;
}
break;
case 2:
if (j == colLeft) {
pos = 3;
rowBottom--;
i--;
} else {
j--;
}
break;
case 3:
if (i == rowTop) {
pos = 0;
colLeft++;
j++;
} else {
i--;
}
break;
}
}
return list;
}
}