顺时针打印举证
解题思路:依次读取上边框、右边框、下边框、左边框。读取之后行列变量进行改变。
/**
* 依次读取上边框、右边框、下边框、左边框
* 读取之后行列变量进行改变
* @param matrix
* @return
*/
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> result = new ArrayList<>();
int rowStart = 0,rowEnd = matrix.length-1,colStart = 0,colEnd = matrix[0].length-1;
while (rowStart<=rowEnd&&colStart<=colEnd){
//读取上边框
for (int i = colStart; i <= colEnd; i++) {
result.add(matrix[rowStart][i]);
}
//读取右边框
for (int i = rowStart+1; i <= rowEnd ; i++) {
result.add(matrix[i][colEnd]);
}
//杜绝只有一行的情况
if (rowStart!=rowEnd){
//读取下边框
for (int i = colEnd-1; i >= colStart ; i--) {
result.add(matrix[rowEnd][i]);
}
}
//杜绝只有一列的矩阵出现重读
if (colStart!=colEnd){
//读取左边框
for (int i = rowEnd-1; i >rowStart; i--) {
result.add(matrix[i][colStart]);
}
}
rowStart++;rowEnd--;colStart++;colEnd--;
}
return result;
}