19.顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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,继续之前的方法打印。
public class Solution {
ArrayList<Integer> list=new ArrayList<>();
public void traverse(int[][] matrix,int row1,int col1,int row2,int col2)
{
if(row1==row2)
{
while(col1<=col2)
list.add(matrix[row1][col1++]);
}
if(col1==col2)
{
while(row1<=row2)
list.add(matrix[row1++][col1]);
}
int curR=row1;
int curC=col1;
while(curC<col2)
{
list.add(matrix[row1][curC++]);
}
while(curR<row2)
{
list.add(matrix[curR++][col2]);
}
while(curC>col1)
{
list.add(matrix[row2][curC--]);
}
while(curR>row1)
{
list.add(matrix[curR--][col1]);
}
}
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null || matrix.length==0 || matrix[0].length==0)
return list;
int row1=0;
int col1=0;
int row2=matrix.length-1;
int col2=matrix[0].length-1;
while(row1<=row2 && col1<=col2)
{
traverse(matrix,row1++,col1++,row2--,col2--);
}
return list;
}
}