54. 螺旋矩阵

题目链接

方法 1:模拟

思路

  1. 把当前行/列涂满之后换下一列/行涂即可。

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix: return []
        m, n = len(matrix), len(matrix[0])
        l, r, t, b, res = 0, n - 1, 0, m - 1, []

        while True:
            for j in range(l, r + 1):
                res.append(matrix[t][j])
            t += 1
            if t > b:
                break
            for i in range(t, b + 1):
                res.append(matrix[i][r])
            r -= 1
            if r < l:
                break
            for j in range(r, l - 1, -1):
                res.append(matrix[b][j])
            b -= 1
            if b < t:
                break
            for i in range(b, t - 1, -1):
                res.append(matrix[i][l])
            l += 1
            if l > r:
                break

        return res

复杂度

  • 时间复杂度:$O(m n)$。
  • 空间复杂度:$O(1)$。
使用 Hugo 构建
主题 StackJimmy 设计