import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> res = new ArrayList<>();
        if (matrix == null || matrix.length < 1 || matrix[0] == null ||
                matrix[0].length < 1) {
            return res;
        }
        int n = matrix.length;
        int m = matrix[0].length;
        int li = 0;
        int lj = 0;
        int ri = n - 1;
        int rj = m - 1;
        while (li <= ri && lj <= rj) {
            if (li == ri) {
                // 从左往右
                for (int k = lj; k <= rj; k++) {
                    res.add(matrix[li][k]);
                }
            } else if (lj == rj) {
                // 从下往上
                for (int k = li; k <= ri; k++) {
                    res.add(matrix[k][rj]);
                }
            } else {
                // 从左往右
                for (int k = lj; k <= rj; k++) {
                    res.add(matrix[li][k]);
                }
                // 从下往上
                for (int k = li + 1; k <= ri; k++) {
                    res.add(matrix[k][rj]);
                }
                // 从右往左
                for (int k = rj - 1; k >= lj; k--) {
                    res.add(matrix[ri][k]);
                }
                // 从上往下
                for (int k = ri - 1; k > li; k--) {
                    res.add(matrix[k][lj]);
                }
            }

            li++;
            lj++;
            ri--;
            rj--;
        }

        return res;
    }
}