public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix == null || matrix.length == 0) {
int m = matrix.length, n = matrix[0].length;
int rowStart = 0, rowEnd = m - 1, colStart = 0, colEnd = n - 1;
while (rowStart <= rowEnd && colStart <= colEnd) {
for (int j = colStart; j <= colEnd; j++) {
res.add(matrix[rowStart][j]);
for (int i = rowStart; i <= rowEnd; i++) {
res.add(matrix[i][colEnd]);
// Edge Case: 当矩阵行数不等于列数时
if (rowStart > rowEnd || colStart > colEnd) {
for (int j = colEnd; j >= colStart; j--) {
res.add(matrix[rowEnd][j]);
for (int i = rowEnd; i >= rowStart; i--) {
res.add(matrix[i][colStart]);