当前位置: 首页 > news >正文

矩阵题解——螺旋矩阵【LeetCode】

54. 螺旋矩阵

 1.1 核心思想
  • 问题描述:给定一个二维矩阵,按照顺时针螺旋顺序返回所有元素。
  • 解决思路
    1. 定义四个边界:leftrightupdown,分别表示当前螺旋遍历的左、右、上、下边界。
    2. 定义四个方向:(0, 1)(向右)、(1, 0)(向下)、(0, -1)(向左)、(-1, 0)(向上)。
    3. 按照当前方向遍历矩阵,当到达边界时,调整边界并切换到下一个方向。
    4. 重复上述过程,直到遍历完所有元素。
1.2 具体步骤
  1. 初始化
    • 检查矩阵是否为空,如果为空则直接返回空列表。
    • 获取矩阵的行数 M 和列数 N
    • 初始化四个边界:left = 0right = N - 1up = 0down = M - 1
    • 初始化结果列表 res
    • 初始化当前位置 (x, y) 为 (0, 0)
    • 初始化当前方向 cur_d 为 0(向右)。
  2. 螺旋遍历
    • 将当前元素 matrix[x][y] 添加到结果列表 res 中。
    • 检查是否需要切换方向:
      • 如果当前方向是向右(cur_d == 0)且到达右边界(y == right),则切换到向下方向(cur_d = 1),并将上边界 up 加 1。
      • 如果当前方向是向下(cur_d == 1)且到达下边界(x == down),则切换到向左方向(cur_d = 2),并将右边界 right 减 1。
      • 如果当前方向是向左(cur_d == 2)且到达左边界(y == left),则切换到向上方向(cur_d = 3),并将下边界 down 减 1。
      • 如果当前方向是向上(cur_d == 3)且到达上边界(x == up),则切换到向右方向(cur_d = 0),并将左边界 left 加 1。
    • 更新当前位置 (x, y) 为下一个方向的位置。
    • 重复上述过程,直到结果列表 res 的长度等于矩阵元素总数 M * N
  3. 返回结果
    • 返回结果列表 res
    class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:if not matrix or not matrix[0]: return []M, N = len(matrix), len(matrix[0])left, right, up, down = 0, N - 1, 0, M - 1res = []x, y = 0, 0dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)]cur_d = 0while len(res) != M * N:res.append(matrix[x][y])if cur_d == 0 and y == right:cur_d += 1up += 1elif cur_d == 1 and x == down:cur_d += 1right -= 1elif cur_d == 2 and y == left:cur_d += 1down -= 1elif cur_d == 3 and x == up:cur_d += 1left += 1cur_d %= 4x += dirs[cur_d][0]y += dirs[cur_d][1]return res
    2.1 时间复杂度
    • 遍历矩阵:每个元素被访问一次,时间复杂度为 O(M * N)
    2.2 空间复杂度
    • 结果列表:存储所有矩阵元素,空间复杂度为 O(M * N)
    • 额外变量:仅使用常数级别的额外空间(如边界变量、方向数组等),空间复杂度为 O(1)
    • 总空间复杂度O(M * N)(主要由结果列表决定)。

    相关文章:

  • 淘宝做网站费用哪家网络公司比较好
  • 厦门网站建设有限公司怎么样东莞市网络营销公司
  • 商城网站栏目代理推广
  • 网站做qq登录关键字是什么意思
  • 你注册过哪些网站sem论坛
  • 营销网站建设网站制作公司网络营销软文
  • Class00.2线性代数
  • rules写成动态
  • 解决npm安装依赖报错ERESOLVE unable to resolve dependency tree
  • excel中vba开发工具
  • C语言基础回顾与Objective-C核心类型详解
  • 15个AI模拟面试平台 和 简历修改 / 真人面试平台
  • 【服务器】服务器选型设计
  • windows 怎么下载yarn安装包并将下载的yarn文件移动到全局目录并添加执行权限?
  • 防火墙快速管理软件,66K超小巧
  • 数据文件写入技术详解:从CSV到Excel的ETL流程优化
  • 批量删除 word文档里面多个相同表格的特定行
  • 博图SCL语言中 RETURN 语句使用详解
  • 【项目】仿muduo库one thread one loop式并发服务器HTTP协议模块
  • 新能源知识库(67)高温热泵在电镀领域的应用
  • LVS-NAT负载均衡群集实战:原理、部署与问题排查
  • Django的CSRF保护机制
  • 工业“三体”联盟:ethernet ip主转profinet网关重塑设备新规则
  • 大塘至浦北高速:解锁分布式光伏“交能融合”密码,引领绿色交通革命
  • 无人机灯光模块运行技术难点解析
  • Java的参数传递机制