import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) { // 我都不知道是怎么做出来的...
ArrayList<Integer> ret = new ArrayList<>();
if (matrix.length == 0) {
return ret;
}
int n = matrix.length;
int m = matrix[0].length;
int i = 0;
int j = 0;
int size = m * n;
int top = 0;
int left = 0;
int lr = 0;
int td = 0;
while (ret.size() < size) {
if (td % 2 == 0) {
for (; j < m; j++) { // 1.从左到右
ret.add(matrix[i][j]);
}
i++;
j--;
top++;
} else {
for (; j >= left; j--) { // 3.从右到左
ret.add(matrix[i][j]);
}
i--;
j++;
left++;
}
td++;
if (lr % 2 == 0) {
for (; i < n; i++) { // 2.从上到下
ret.add(matrix[i][j]);
}
i--;
j--;
m--;
} else {
for (; i >= top; i--) { // 4.从下到上。
ret.add(matrix[i][j]);
}
i++;
j++;
n--;
}
lr++;
}
return ret;
}
}