剑指 Offer 29. 顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
解答
class Solution {
/**
定义上、下、左、右四个边界,根据四个边界作为起始终止的条件进行遍历
*/
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0){
return new int[0];
}
int left = 0,up = 0,down = matrix.length-1,right = matrix[0].length-1;
int[] res = new int[(down+1) * (right+1)];
int i = 0;
while(left <= right && up <= down){
for(int j = left;j <= right;j++){ //上
res[i++] = matrix[up][j];
}
up++;
if(up > down){
break;
}
for(int j = up;j <=down;j++){ //右
res[i++] = matrix[j][right];
}
right--;
if(left > right){
break;
}
for(int j = right;j >= left;j--){ //下
res[i++] = matrix[down][j];
}
down--;
if(up > down){
break;
}
for(int j = down;j >= up;j--){ //左
res[i++] = matrix[j][left];
}
left++;
}
return res;
}
}