解题思路
下图是打印的顺序
image.png
首先去定义上、下、左、右四个边界
比如:在图中,打印1,2,3.
起始位置是左边界,结束位置是右边界,在遍历结束后,上边界要向下收缩,同时要判断上边界是否大于下边界,如果大于,立刻结束
while循环,直接返回数组
以此为例,在其它三个边界继续遍历
最后将数组返回
代码
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0) return new int[0];
int x=0;
int l=0;
int r=matrix[0].length-1;
int b=0;
int u=matrix.length-1;
int [] nums=new int[(r+1)*(u+1)];
while(true){
for(int i1=l;i1<=r;i1++){
nums[x++]=matrix[b][i1];
}
b++;
if(b>u) break;
for(int i2=b;i2<=u;i2++){
nums[x++]=matrix[i2][r];
}
r--;
if(l>r) break;
for(int i3=r;i3>=l;i3--){
nums[x++]=matrix[u][i3];
}
u--;
if(b>u) break;
for(int i=u;i>=b;i--){
nums[x]=matrix[i][l];
x++;
}
l++;
if(l>r) break;
}
return nums;
}
}
网友评论