题目
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解法一
思路
定义4个方向坐标。
记录是否访问过。
代码
public List<Integer> spiralOrder(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
int x = 0;
int y = 0;
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
int d = 0;
boolean[][] visited = new boolean[m][n];
List<Integer> list = new LinkedList<>();
for (int i = 0; i < m * n; i++) {
visited[x][y] = true;
list.add(matrix[x][y]);
int a = x + dx[d];
int b = y + dy[d];
if (a < 0 || a >= m || b < 0 || b >= n || visited[a][b]) {
d = (d + 1) % 4;
}
x = x + dx[d];
y = y + dy[d];
}
return list;
}
复杂度
- 时间复杂度:O(mn)
- 空间复杂度:O(mn)