import java.util.*;


public class Solution {
    //分层进行模拟,定位四个方向进行缩小
    public ArrayList<Integer> spiralOrder (int[][] matrix) {
        // write code here
        ArrayList<Integer> ret = new ArrayList<>();
        int n = matrix.length;

        if(n==0){ //存在数组未空
            return ret;
        }
        int m = matrix[0].length;

        if(m==0) return ret;
        int top = 0, bottom = n-1, left =0,right = m-1;

        //遍历到最后一个
        while(left <=right && top <= bottom){
            //上层
            for(int i=left;i<=right;i++){
                ret.add(matrix[top][i]);
            }
            //右
            for(int i=top+1;i<=bottom;i++){
                ret.add(matrix[i][right]);

            }
            if(left<right && top<bottom){
                  //下
                for(int i=right-1;i>=left;i--){
                    ret.add(matrix[bottom][i]);
                }
                //左
                for(int i=bottom-1;i>top;i--){
                    ret.add(matrix[i][left]);

                }

            }

            left++;
            right--;
            top++;
            bottom--;
          
        }

        return ret;
    }
}