输入一个矩阵(不一定是n*n),按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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) {
if(matrix.length == 0) return null;
//row是上下游标,cols是左右游标,k是逐渐增厚的“墙”将包围圈缩小
int rows = matrix.length, cols = matrix[0].length, row = 0, col = -1, k = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
while(list.size()<rows*cols) {
//从左到右
while (++col < cols - k) {
list.add(matrix[row][col]);
}
col--;
//从上到下
while (++row < rows - k) {
list.add(matrix[row][col]);
}
row--;
if(list.size()== rows*cols) break;
//从右到左
while (--col >= k) {
list.add(matrix[row][col]);
}
col++;k++;
//从下到上
while (--row >= k) {
list.add(matrix[row][col]);
}
row++;
}
return list;
}
}