路径模拟
时间:O(mn),mn为矩阵长宽

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> ans = new ArrayList<Integer>();
        if(matrix==null || matrix.length==0)
            return ans;
       //获取矩阵长宽
        int calT = matrix.length;
        int rowT = matrix[0].length;

        //按照路径遍历
        int count = 0;
        int cal = 0;
        int row = 0;
        int res = 0;//控制边距
        boolean leftFlag = false;
        boolean rightFlag = true;
        boolean upFlag = false;
        boolean downFlag = false;
        while(count<calT*rowT){
            ans.add(matrix[cal][row]);
            count++;
            //向右,向下,向左,向上
            if(rightFlag==true){
                if(row==rowT-res-1){
                    rightFlag = false;
                    downFlag = true;
                    if(cal<calT-res-1)
                        cal++;
                }else{
                    row++;
                }
            }else if(downFlag==true){
                if(cal==calT-res-1){
                    downFlag = false;
                    leftFlag = true;
                    if(row>res)
                        row--;
                }else{
                    cal++;
                }
            }else if(leftFlag==true){
                if(row==res){
                    leftFlag = false;
                    upFlag = true;
                    if(cal>res+1)
                        cal--;
                }else{
                    row--;
                }
            }else if(upFlag==true){
                if(cal==res+1){
                    upFlag = false;
                    rightFlag = true;
                    res++;
                    if(row<calT-res-1)
                        row++;
                }else{
                    cal--;
                }
            }
        }

        return ans;
    }
}