class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0) return new int[0];
int l=0,r=matrix[0].length-1,t=0,b=matrix.length-1,x=0;
int []res=new int[(r+1)*(b+1)];
while(true){
//从左到右
for(int i=l;i<=r;i++)
res[x++]=matrix[t][i];
t++;
if(t>b) break;
//从上到下
for(int i=t;i<=b;i++)
res[x++]=matrix[i][r];
r--;
if(r<l) break;
//从右到左
for(int i=r;i>=l;i--)
res[x++]=matrix[b][i];
b--;
if(b<t) break;
//从下到上
for(int i=b;i>=t;i--)
res[x++]=matrix[i][l];
l++;
if(l>r) break;
}
return res;
}
}
new int[0]虽然是分配一个0长度的内存空间给这个数组也就是这个引用型变量,但是它却指定了它在内存中的起始位置。
而如果array = null,那它用C中的说法就是个啥也不值的空指针。
参考博客链接:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix==null||matrix.length==0) return new LinkedList<>();
int t=0,d=matrix.length-1,l=0,r=matrix[0].length-1;
List<Integer> list=new LinkedList<>();
while(l<=r&&t<=d){
//从左到右
for(int i=l;i<=r;i++){
list.add(matrix[t][i]);
}
t++;
//从上到下
for(int i=t;i<=d;i++){
list.add(matrix[i][r]);
}
r--;
//从右到左
for(int i=r;i>=l&&t<=d;i--){
list.add(matrix[d][i]);
}
d--;
//从下到上
for(int i=d;i>=t&&l<=r;i--){
list.add(matrix[i][l]);
}
l++;
}
return list;
}
}