import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        if(matrix.length == 0)
            return res;
        int m = matrix.length;
        int n = matrix[0].length;
        //设置上下左右边界
        int left = 0,right = n-1,up = 0,down = m-1;
        while(left <= right && up <= down){
            //上方从左到右
            for(int i = left;i<=right;i++){
                res.add(matrix[up][i]);
            }
            up++;
            
            //右侧从上到下
            if(up>down)
                break;
            for(int i = up;i <= down;i++){
                res.add(matrix[i][right]);
            }
            right--;
            
            //底部从右到左
            if(left > right)
                break;
            for(int i = right; i >= left;i--){
                res.add(matrix[down][i]);
            }
            down--;
            
            
            //左侧从下到上
            if(up > down)
                break;
            for(int i = down; i >= up; i--){
                res.add(matrix[i][left]);
            }
            left++;
            if(left>right)
                break;
        }
        return res;
    }
}