题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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],[2],[3],[4],[5]]
对应输出应该为:
[1,2,3,4,5]
你的输出为:
[1,2,3,4,5,4,3,2]
//一列
用例:
[[1,2,3,4,5]]
对应输出应该为:
[1,2,3,4,5]
你的输出为:
[1,2,3,4,5,4,3,2,1]
运行时间:23ms
占用内存:9440k
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
if(matrix==null || matrix.length==0 ||(matrix.length==1 && matrix[0].length == 0) )
return res;
int itop = 0; //行上指针
int ibottom = matrix.length-1;
int jleft = 0;
int jright = matrix[0].length-1; //列指针
while(itop <= ibottom && jleft <= jright){
//->
for(int j=jleft; j<=jright; j++)
res.add(matrix[itop][j]);
itop++;
//考虑一行的情况
if(itop > ibottom)
break;
//|
for(int i=itop; i<=ibottom; i++)
res.add(matrix[i][jright]);
jright--;
//考虑一列的情况
if(jright < jleft)
break;
//<-
for(int j=jright; j>=jleft; j--)
res.add(matrix[ibottom][j]);
ibottom--;
//^|
for(int i=ibottom; i>=itop; i--)
res.add(matrix[i][jleft]);
jleft++;
}
return res;
}
}