⏰ 时间复杂度: O ( n m ) O(nm) O(nm)
空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public List spiralOrder(int[][] matrix)
{
if (matrix.length == 0)
return new ArrayList();
int l = 0;// 左边界
int r = matrix[0].length - 1;// 右边界
int t = 0;// 上边界
int b = matrix.length - 1;// 下边界
List res = new ArrayList<>();
while (true)
{
for (int i = l; i <= r; i++)//顶部 从左到右
res.add(matrix[t][i]);
if (++t > b)
break;
for (int i = t; i <= b; i++)//右边 从上到下
res.add(matrix[i][r]);
if (l > --r)
break;
for (int i = r; i >= l; i--)//底部 从右到左
res.add(matrix[b][i]);
if (t > --b)
break;
for (int i = b; i >= t; i--)//左边 从下到上
res.add(matrix[i][l]);
if (++l > r)
break;
}
return res;
}
}