class Solution {
public int[] spiralArray(int[][] array) {
int n = array.length;
if(n==0){
return new int[0];
}
int m = array[0].length;
int[] nums = new int[n*m];
int len = 0;
int top=0;
int bottom = n-1;
int left = 0;
int right = m-1;
int j=0;
int i = 0;
while(len<n*m){
for(j=left;j<=right&&len<n*m;j++){
nums[len++]=array[top][j];
}
top++;
for(i=top;i<=bottom&&len<n*m;i++){
nums[len++]=array[i][right];
}
right--;
for(j=right;j>=left&&len<n*m;j--){
nums[len++]=array[bottom][j];
}
bottom--;
for(i=bottom;i>=top&&len<n*m;i--){
nums[len++]=array[i][left];
}
left++;
}
return nums;
}
}
思路:设置上下左右各4个边界变量,每个循环的判断条件记得加上len<n*m,否则会有越界错误。
坑1:如果循环判断条件没加上len<n*m,比如当array=[[1,2]]时,第三个for循环条件成立会执行,此时len已经是3了,越界。
坑2:当array为空时,返回空数组new int[0];
提交,通过!