class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> order = new ArrayList<Integer>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
            return order;
        }
        int rows = matrix.length;
        int colums = matrix[0].length;
        int left = 0, right = colums-1,top = 0 , bottom = rows-1;
        while(left<=right && top <= bottom ){
            for (int column = left; column <= right;column++){
                order.add(matrix[top][column]);
            }
            for(int row = top+1; row<=bottom; row++){
                order.add(matrix[row][right]);
            }
            // 检查是否需要继续遍历,如果当前区域不是一个行或列,则执行内部的遍历。
            if(left<right && top<bottom){
                //  从右到左遍历当前下边界,将元素添加到列表中
                for(int column = right-1 ; column>left ; column--){
                    order.add(matrix[bottom][column]);
                }
                for(int row = bottom; row>top; row--){
                    order.add(matrix[row][left]);
                }
            }
            // 更新边界值,缩小遍历区域。
            left++;
            right--;
            top++;
            bottom--;
        }
        //  返回按照螺旋顺序遍历矩阵后得到的整数列表
        return order;
    }
}