解决办法
考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。
循环打印: “从左向右、从上向下、从右向左、从下向上”
算法
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;//t为上边界,b为下边界
int k=0;
int[] result = new int[(r+1)*(b+1)];
while(true){
//从左到右
for(int i = l;i<=r;i++) result[k++] = matrix[t][i];
if(++t>b) break;
//从上到下
for(int i = t;i<=b;i++) result[k++]= matrix[i][r];
if(l>--r) break;
//从右到左
for(int i=r;i>=l;i--) result[k++] = matrix[b][i];
if(t>--b) break;
//从下到上
for(int i=b;i>=t;i--) result[k++] = matrix[i][l];
if(++l>r) break;
}
return result;
}
}
注意事项
注意四个边界如何收缩