输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路:
一共打印(Math.min(m,n)-1)/2+1圈 外循环是这个 circle代表当前打印第几圈了
里边有四个循环 分别对应最上边的从左到右打印 最右边的从上往下...... 每个循环的开始和结束位置都是和circle有关 找一下规律
特殊情况:第三个循环(下边的从右向左打印) 这里可能会出现一个问题 如果最后只剩一行的话 会不会和第一个循环重复打印 所以条件m-1-circle!=circle就是解决这个问题的
m-1-circle就是当前打印的行 circle是第一个循环打印的行 只要他们两个不想等就可以打印 如果相等那就说明只有一行 那么不打印
第四个循环同理。
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> result=new ArrayList<>(); int m=matrix.length; int n=matrix[0].length; int layers=(Math.min(m,n)-1)/2+1; for(int circle =0;circle < layers;circle++){ for(int j=circle;j<n-circle;j++){ result.add(matrix[circle][j]); } for(int j=circle+1;j<m-circle;j++){ result.add(matrix[j][n-1-circle]); } for(int j=n-2-circle;j>=circle&&(m-1-circle!=circle);j--){ result.add(matrix[m-1-circle][j]); } for(int j=m-2-circle;j>=circle+1&&(n-1-circle)!=circle;j--){ result.add(matrix[j][circle]); } } return result; } }