class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if (matrix == null)
return null;
if (matrix.length == 0 || matrix[0].length == 0)
return new ArrayList<Integer>();
List<Integer> list = new ArrayList<Integer>();
int start = 0;
while (2 * start < matrix.length && 2 * start < matrix[0].length) {
int endX = matrix[0].length - 1 - start;
int endY = matrix.length - 1 - start;
for (int i = start; i <= endX; ++i)
list.add(matrix[start][i]);
if (endY > start)
for (int i = start + 1; i <= endY; ++i)
list.add(matrix[i][endX]);
if (start < endX && start < endY)
for (int i = endX - 1; i >= start; --i)
list.add(matrix[endY][i]);
if (start < endX && start < endY - 1)
for (int i = endY - 1; i >= start + 1; --i)
list.add(matrix[i][start]);
++start;
}
return list;
}
}