public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0 || matrix[0] == null) {
return result;
}
int row = matrix.length;
int col = matrix[0].length;
int left = 0;
int right = col - 1;
int up = 0;
int down = row - 1;
while (row > 0 && col > 0) {
if (row == 1) {
for (int j = left; j <= right; j++) {
result.add(matrix[up][j]);
}
break;
} else if (col == 1) {
for (int i = up; i <= down; i++) {
result.add(matrix[i][left]);
}
break;
}
for (int j = left; j < right; j++) {
result.add(matrix[up][j]);
}
for (int i = up; i < down; i++) {
result.add(matrix[i][right]);
}
for (int j = right; j > left; j--) {
result.add(matrix[down][j]);
}
for (int i = down; i > up; i--) {
result.add(matrix[i][left]);
}
left++;
right--;
up++;
down--;
row -= 2;
col -= 2;
}
return result;
}
}