题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
示例1
输入
[[1,2],[3,4]]
返回值
[1,2,4,3]

解题思路
先打印外圈,再打印内圈
以一圈为一次循环。每次循环改变这个圈的上下左右四个坐标
需要注意只有一行或者只有一列时,避免重复计算
Java代码

import java.util.*;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> ans=new ArrayList<>();
        if(matrix==null) return ans;
        int i_length=matrix.length;
        int j_length=matrix[0].length;
        for(int i=0,j=0,k=i_length-1,t=j_length-1;i<=k && j<=t;i++,j++,k--,t--){//循环条件就是圈缩小1
            for(int m=j;m<=t;m++)//打印该圈的上边界
                ans.add(matrix[i][m]);
            for(int m=i+1;m<=k;m++)//打印该圈的右边界
                ans.add(matrix[m][t]);
            if(i != k){//打印该圈的下边界,只有一行就没有下边界
                for(int m=t-1;m>=j;m--)
                ans.add(matrix[k][m]);
            }
            if(j!=t){//打印该圈的左边界,只有一列就没有左边界
                for(int m=k-1;m>i;m--)
                ans.add(matrix[m][j]);
            }
        }
        return ans;
    }
}