题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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; } }