给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/spiral-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

递归处理即可。

class Solution {

public List<Integer> ans = new ArrayList<>(8);

int[][] matrix = null;

public List<Integer> spiralOrder(int[][] matrix) {
this.matrix = matrix;
rec(matrix.length, matrix[0].length, 0, 0);
return ans;
}

void rec(int m, int n, int x, int y) {
if (m == 0 || n == 0) return;
if (n == 1) {
for (int i = 0; i < m; i++) {
ans.add(matrix[x+i][y]);
}
return;
}
if (m == 1) {
for (int i = 0; i < n; i++) {
ans.add(matrix[x][y+i]);
}
return;
}
for (int i = 0; i < n; i++) {
ans.add(matrix[x][y+i]);
}
for (int i = 1; i <= m - 2; i++) {
ans.add(matrix[x+i][y+n-1]);
}

for (int i = 0; i < n; i++) {
ans.add(matrix[x+m-1][y+n-1-i]);
}

for (int i = 1; i <= m - 2; i++) {
ans.add(matrix[x+m-1-i][y]);
}
rec(m - 2, n - 2, x + 1, y + 1);
}

}

复杂度

  • 时间复杂度:
  • 空间复杂度: