题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路
对于每一次循环都可以看做是从左到右、从上到下、从右到左、从下到上各一遍,而每次循环的开始的时候,行标和列标都是相同的,所以循环的条件是
col>2*i&&row>2*i
代码实现
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12
// 13 14 15 16
ArrayList<Integer> res = new ArrayList<>();
int row = matrix.length;//行数
if(row==0)
return res;
int col = matrix[0].length;//列数
for(int i=0;col>2*i&&row>2*i;i++){
int endY = col-1-i;
int endX = row-1-i;
//从左到右,第i行
for(int j=i;j<=endY;j++)
res.add(matrix[i][j]);
//从上到下,第endY列
for(int j=i+1;j<=endX;j++)
res.add(matrix[j][endY]);
//从右到左,第endX行
if(endX>i)
for(int j=endY-1;j>=i;j--)
res.add(matrix[endX][j]);
//从下到上,第i列
if(endY>i)
for(int j=endX-1;j>i;j--)
res.add(matrix[j][i]);
}
return res;
}
}