题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
代码
思路很清晰,就是先向右查找,后向下,再向左,最后向上;然后,重复上面的过程;最后,查找到结尾,退出,返回结果。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> newarr = new ArrayList<Integer>();
// 定义一下查找边界
// i表示行,imin为左边界,imax为右边界;j表示列;
int imin = 0, imax =matrix.length, jmin = 0, jmax = matrix[0].length;
while(true) {
// 向右 行(i)不变,列(j)从jmin查找到jmax-1
for(int i=imin, j=jmin; j<jmax; j++ ) {
newarr.add(matrix[i][j]);
}
imin++; // 查找完本行,行(i)的小边界要+1
if(imin>=imax) break; // 判断是否小边界大于或等于大边界(说明查找完毕),退出。
// 向下
for(int j=jmax-1, i=imin; i<imax; i++) {
newarr.add(matrix[i][j]);
}
jmax--;
if(jmax<=jmin) break;
// 向左
for(int i=imax-1, j=jmax-1; j>=jmin; j-- ) {
newarr.add(matrix[i][j]);
}
imax--;
if(imax<=imin) break;
// 向上
for(int j=jmin, i=imax-1; i>=imin; i--) {
newarr.add(matrix[i][j]);
}
jmin++;
if(jmin>=jmax) break;
}
return newarr;
}
}