[2025-10-05] Leetcode 54. 螺旋矩阵(居然击败100%😊)

题目

54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 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

我的代码(Python)

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        result  =[]
        m = len(matrix)
        n = len(matrix[0])
        startR, startC, endR, endC = 0, 0, m, n
        direction = 0 # 0: right, 1: down, 2: left, 3: right
        i, j = startR, startC
        while i >= startR and i < endR and j >= startC and j < endC:
            # print(f'i: {i}, j: {j}, direction: {direction}')
            result.append(matrix[i][j])
            if direction == 0:
                if j >= endC - 1:
                    direction = 1
                    startR += 1
                    i += 1
                else:
                    j += 1
            elif direction == 1:
                if i >= endR - 1:
                    direction = 2
                    endC -= 1
                    j -= 1
                else:
                    i += 1
            elif direction == 2:
                if j <= startC:
                    direction = 3
                    endR -= 1
                    i -= 1
                else:
                    j -= 1
            elif direction == 3:
                if i <= startR:
                    direction = 0
                    startC += 1
                    j += 1
                else:
                    i -= 1
        return result

点评

难度在于边界条件的判定和方向置换,很容易搞乱。逻辑上没什么困难的。
官方的方式简洁一些,是一次直接添加一圈,不像我是一个元素一个元素添加。
不过时间上差不多,因为for循环的判定次数并没有减少。
大概这也就是基本的解法了。


baddif@gmail.com

AI简历优化站

Nonpareil.me:优化简历,助力职场
开源代码

AI求职跟踪器(建设中)

开源代码

主站(建设中)

Nonpareil Me

相关平台

Github Issues / Notion / Blog

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部