图片说明

import java.util.ArrayList;
public class Solution {
    public static  ArrayList<Integer> printClockwiseMatrix(int[][] matrix){
        int sL=0;
        int sR=0;//第一个点(sL,sR)
        int eL=matrix.length-1;
        int eR=matrix[0].length-1;//最后一个点(eL,eR)
        //递归
        ArrayList<Integer> list=new ArrayList<Integer>();
        while(sL<=eL && sR<=eR){
            list=printEdge(matrix,sL++,sR++,eL--,eR--,list);
        }
        return list;
    }

    public static ArrayList<Integer> printEdge(int[][] matrix,int sL,int sR,int eL,int eR,ArrayList<Integer> list){
        if(sL==eL){//只有一行
            for(int i=sR;i<=eR;i++){
                list.add(matrix[sL][i]);
            }
        }
        else if(sR==eR){//只有一列
            for(int i=sL;i<=eL;i++){
                list.add(matrix[i][sR]);
            }
        }
        else{
            int curL=sL;
            int curR=sR;
            while(curR!=eR){//打印1, 2, 3
                list.add(matrix[sL][curR]);
                curR++;
            }
            while(curL!=eL){//打印4, 8, 12,
                list.add(matrix[curL][eR]);
                curL++;
            }
            while(curR!=sR){//打印16, 15, 14, 
                list.add(matrix[eL][curR]);
                curR--;
            }
            while(curL!=sL){//打印13, 9, 5 
                list.add(matrix[curL][sR]);
                curL--;
            }
        }
        return list;
    }
}