这里取最外圈的左上角顶点和左下角顶点的坐标,表示一个子矩阵,按照从外到里的顺序打印每个子矩阵就可以了。

import java.util.*;


public class Solution {
    /**
     * 
     * @param matrix int整型二维数组 the matrix
     * @return int整型一维数组
     */
    public int[] printMatrix (int[][] matrix) {
        // write code here
        int sl=0;
        int sr=0;
        int el=matrix.length-1;
        int er=matrix[0].length-1;
        int[] arr=new int[matrix.length*matrix[0].length];
        ArrayList<Integer> list=new ArrayList<>();
        while(sl<=el && sr<=er){
            if(sl==el){
                for(int i=el;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){
                    list.add(matrix[sl][curr]);
                    curr++;
                }
                while(curl!=el){
                    list.add(matrix[curl][er]);
                    curl++;
                }
                while(curr!=sr){
                    list.add(matrix[el][curr]);
                    curr--;
                }
                while(curl!=sl){
                    list.add(matrix[curl][sr]);
                    curl--;
                }

            }
            sl++;
            sr++;
            el--;
            er--;
        }

        for(int i=0;i<=arr.length-1;i++){
            arr[i]=list.get(i);
        }
        return arr;
    }
}