import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> retList = new ArrayList<>() ;
        if(matrix == null || matrix.length==0 || matrix[0].length==0) {
            return retList ;
        }
        //定义边界
        int up = 0 ;
        int down = matrix.length-1 ;
        int left = 0 ;
        int right = matrix[0].length-1 ;
        //定义坐标(i,j)
        int i = 0 ;
        int j = 0 ;
        while(isOk(up , down , left , right , i , j)) {
            //向右运动
            while(j <= right) {
                retList.add(matrix[i][j]);
                j ++ ;
            }
            j--;
            i++;
            up++ ;
            //向下运动
            if(!isOk(up , down , left , right , i , j)) {
                break ;
            }
            while(i <= down) {
               retList.add(matrix[i][j]);
                i ++ ;
            }
            i-- ;
            j--;
            right--;
            //向左运动
            if(!isOk(up , down , left , right , i , j)) {
                break ;
            }
            while(j >= left) {
               retList.add(matrix[i][j]);
                j-- ;
            }
            j++ ;
            i--;
            down-- ;
            //向上运动
            if(!isOk(up , down , left , right , i , j)) {
                break ;
            }
            while(i >= up) {
               retList.add(matrix[i][j]);
               i-- ;
            }
            i++ ;
            j++ ;
            left++;
        }
        return retList ;
    }
    //判断是否超出边界
    public boolean isOk(int up , int down , int left , int right , int i , int j) {
        if(i >= up && i <= down && j >= left && j <= right) {
            return true ;
        }
        return false ;
    }
}