LeetCode 54 Spiral Matrix 解题思路和python代码

题目:

Given an m x n matrix, return all elements of the matrix in spiral order.

Example 1:

Input: matrix = \[1,2,3,4,5,6,7,8,9]

Output: 1,2,3,6,9,8,7,4,5

Example 2:

Input: matrix = \[1,2,3,4,5,6,7,8,9,10,11,12]

Output: 1,2,3,4,8,12,11,10,9,5,6,7

Constraints:

m == matrix.length

n == matrixi.length

1 <= m, n <= 10

-100 <= matrixij <= 100

题目解析:

这道题目要求我们遍历 matrix 中的每个元素,用一个螺旋形的顺序。我们需要从外层到内层,遍历 matrix 中的每个元素。

我们会使用以下4个指针。

top: 从0开始,指向 matrix 的第一行。

bottom: 从 m-1 开始,指向 matrix 的最后一行。

left: 从0开始,指向 matrix 的第一列。

right: 从 n-1 开始,指向matix 的最后一列。

python 复制代码
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        result = []
        if not matrix:
            return result
        
        top, bottom = 0, len(matrix)-1
        left, right = 0, len(matrix[0]) - 1

        while top <= bottom and left <= right:
            # Traverse from left to right across the top row
            for i in range(left, right+1):
                result.append(matrix[top][i])
            top += 1

            # Traverse down the right column
            for i in range(top, bottom+1):
                result.append(matrix[i][right])
            right -= 1

            if top <= bottom:
                # Traverse from right to left across the bottom row
                for i in range(right, left-1, -1):
                    result.append(matrix[bottom][i])
                bottom -= 1
            
            if left <=  right:
                # Traverse up the left column
                for i in range(bottom, top-1, -1):
                    result.append(matrix[i][left])
                left += 1
        
        return result


        

从4个方向进行遍历:

从 matrix 的第一行,也就是顶部,从左到右,把元素添加进 result。

接着,从 matrix的最后一列,也就是最右边,从上到下,把元素添加进 result。

然后,从 matrix的最后一行,也就是底部,从右到左,把元素添加进result。

最后,从 matrix的第一列,也就是最左边,从下到上,把元素添加进result。

重复以上步骤,从外到内,直到把虽有元素添加完毕。

Time Complexity 是 O(m*n),其中m是行数,n是列数。

相关推荐
复杂网络2 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
你好潘先生2 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师2 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码2 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf2 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes16 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron17 小时前
面试常客:字符串算法从入门到进阶
算法·面试
用户83562907805117 小时前
使用 Python 在 PDF 中创建与管理书签
后端·python
吴佳浩19 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹20 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法