力扣hot100 螺旋矩阵 模拟
Problem: 54. 螺旋矩阵
思路
💖 收缩边界法
⏰ 时间复杂度:
O
(
n
m
)
O(nm)
O(nm)
🌎 空间复杂度:
O
(
1
)
O(1)
O(1)
class Solution {
public List<Integer> spiralOrder(int[][] matrix)
{
if (matrix.length == 0)
return new ArrayList<Integer>();
int l = 0;// 左边界
int r = matrix[0].length - 1;// 右边界
int t = 0;// 上边界
int b = matrix.length - 1;// 下边界
List<Integer> 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;
}
}