/*
在脑子里过一遍思路,各种+1 -1还有= condition
注意每个for loop加上 && res.size() < m * n
比如3✖️3中间的element x,如果不加 && res.size() < m * n, x会被add四次
*/
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix == null || matrix.length == 0) return res;
int m = matrix.length, n = matrix[0].length;
int left = 0, up = 0, right = n - 1, down = m - 1;
while(res.size() < n * m) {
for(int i = left; i <= right && res.size() < m * n; i++) {
res.add(matrix[left][i]);
}
for(int i = up + 1; i <= down && res.size() < m * n; i++) {
res.add(matrix[i][right]);
}
for(int i = right - 1; i >= left && res.size() < m * n; i--) {
res.add(matrix[down][i]);
}
for(int i = down - 1; i >= up + 1 && res.size() < m * n; i--) {
res.add(matrix[i][left]);
}
left++; right--; up++; down--;
}
return res;
}
}