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