螺旋矩阵
2026年3月21日小于 1 分钟
螺旋矩阵
使用的方法
Arrays.asList():将数组转换为列表。
解题思路
- 定义四个指针
l、r、t和b,分别表示当前矩阵的左边界、右边界、上边界和下边界。 - 使用一个变量
x来记录当前已经添加到结果列表中的元素数量。 - 在一个循环中,按照顺时针的顺序依次遍历矩阵的四个边界,并将元素添加到结果列表中。
- 每次遍历完一个边界后,更新相应的指针,并检查是否越界,如果越界则退出循环。
代码实现
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;
int x = 0;
Integer[] res = new Integer[(r+1)*(b+1)];
while(true){
for(int i=l;i<=r;i++) res[x++] = matrix[t][i];
if(++t > b) break;
for(int i=t;i<=b;i++) res[x++] = matrix[i][r];
if(l > --r) break;
for (int i=r; i>=l;i--) res[x++] = matrix[b][i];
if (t > --b) break;
for (int i=b; i>=t;i--) res[x++] = matrix[i][l];
if (++l > r) break;
}
return Arrays.asList(res);
}
}