**问题:**输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
想法自己都觉得麻烦,循环设计到的参数比较多,要分别确定遍历转弯与终止的条件,我增加了一个布尔数组判断这个数是否被打印过,通过这样判断是否转弯;最终循环终止的条件是遍历过所有的内容。
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> al = new ArrayList<Integer>();
int sizeW = matrix[0].length; //矩阵的列数
int sizeH = matrix.length; //矩阵的行数
int count = sizeW * sizeH; //矩阵存放数字的数量
boolean[][] flag = new boolean[sizeH][sizeW];
int x = 0;
int y = -1;
while(count>0){
//向右遍历
while(y+1 < sizeW && !flag[x][y+1]){
y++;
flag[x][y] = true;
al.add(matrix[x][y]);
count--;
}
//向下遍历
while(x+1 < sizeH && !flag[x+1][y]){
x++;
flag[x][y] = true;
al.add(matrix[x][y]);
count--;
}
//向左遍历
while(y-1 >= 0 && !flag[x][y-1]){
y--;
flag[x][y] = true;
al.add(matrix[x][y]);
count--;
}
//向上遍历
while(x-1 >= 0 && !flag[x-1][y]){
x--;
flag[x][y] = true;
al.add(matrix[x][y]);
count--;
}
}
return al;
}