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;
    }
}