找规律,通过限制四个边界循环打印。
需要注意的点:当二维数组比较特殊,只有一行、一列或一个元素时,循环会出问题,因此在每一次修改边界后都判断循环是否应该继续,是否应该终止。
public ArrayList<Integer> printMatrix(int [][] matrix) {
if(matrix==null) return new ArrayList<>();
int rowLength=matrix.length;
if(rowLength==0) return new ArrayList<>();
int colLength=matrix[0].length;
if(colLength==0) return new ArrayList<>();
int top=0,bottom=rowLength-1,left=0,right=colLength-1;
ArrayList<Integer> answer=new ArrayList<>();
while(top<=bottom&&left<=right){
if(top<=bottom&&left<=right){
//打印上边界
for(int i=left;i<=right;i++){
answer.add(matrix[top][i]);
}
top++;
}
if(top<=bottom&&left<=right){
//打印右边界
for(int i=top;i<=bottom;i++){
answer.add(matrix[i][right]);
}
right--;
}
if(top<=bottom&&left<=right){
//打印下边界
for(int i=right;i>=left;i--){
answer.add(matrix[bottom][i]);
}
bottom--;
}
if(top<=bottom&&left<=right){
//打印左边界
for(int i=bottom;i>=top;i--){
answer.add(matrix[i][left]);
}
left++;
}
}
return answer;
}