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