class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix == null || matrix.length == 0){
return new ArrayList<>();
}
int rows = matrix.length;
int cols = matrix[0].length;
int total = rows * cols;
List<Integer> numList = new ArrayList<>();
int i = 0, j = 0, n = 0;
boolean flag = true;
numList.add(matrix[0][0]);
for (int k = 0; k < total; k++) {
if (flag) {
if (j < cols - n - 1) {
j++;
numList.add(matrix[i][j]);
continue;
}
if (i < rows - n - 1) {
i++;
numList.add(matrix[i][j]);
continue;
}
flag = false;
} else {
if (j > n) {
j--;
numList.add(matrix[i][j]);
continue;
}
if (i > n + 1) {
i--;
numList.add(matrix[i][j]);
continue;
}
flag = true;
n++;
k-=2;
}
}
return numList;
}
}