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

LeetCode54 螺旋矩阵

给你一个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]

分析

1.暴力解法:利用已知的行列数循环输出。(时间复杂度高,不推荐)
2.状态表解法
从示例中可以看出来,输出遵守四个方向,依次是:右,下,左,上。对于数组元素 element [ i ] [ j ] \text{element}[i][j] element[i][j],四种状态分别对应着 j + 1 j+1 j+1, i + 1 i+1 i+1, j − 1 j-1 j1, i − 1 i-1 i1
那么如何更新状态?有两个限制条件
1)首先是矩阵的长度宽度;2)这个矩阵元素是否被遍历过了;
第二个条件就需要另外开辟一个状态矩阵,初始化为 m × n m \times n m×n大小的0矩阵,若遍历过,元素状态变为1。

Code

def spiraOrder(matrix):row_num = len(matrix)col_num = len(matrix[0])# state_list = []state_list = [[0 for _ in range(row_num)] for _ in range(col_num)]total_num = row_num * col_numdirection_list = [[0, 1], [1, 0], [0, -1], [-1, 0]]direction_index = 0row, col = 0, 0res_list = []for i in range(total_num):res_list.append(matrix[row][col])state_list[row][col] = 1# print(state_list)next_row = row + direction_list[direction_index][0]next_col = col + direction_list[direction_index][1]if next_row < 0 or next_col < 0 or next_col >= col_num or next_row >= row_num or state_list[next_row][next_col]:direction_index = (direction_index + 1) % 4# print("index: ", direction_index)row += direction_list[direction_index][0]col += direction_list[direction_index][1]return res_list
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]print(spiraOrder(matrix)) # [1, 2, 3, 6, 9, 8, 7, 4, 5]
http://www.lryc.cn/news/70501.html

相关文章:

  • qt实现简单计算器推荐博客
  • 各数据库分页语法支持
  • 牛牛截图控件与利洽远程控制产品升级-支持证书自动升级
  • 06-jQuery-DOM操作-属性操作-attr()\prop()\addClass()\toggleClass()等
  • 接口自动化框架(Pytest+request+Allure)
  • 2. 流程控制语句
  • 为了流量,何同学做了个“假B站”?
  • 腾讯云图形验证码申请流程
  • 浅谈管网抢维修效率对产销差率的影响
  • java设备台账管理系统myeclipse定制开发mysql数据库网页模式java编程jdbc
  • ChatGPT帮你写简历找工作
  • CentOS 8.5和CentOS8.4安装-解决Error setting up base repository问题
  • 数据抓取使用HTTP隧道代码示例
  • vue3【使用axios并封装axios请求】
  • 「实验记录」MIT 6.824 Raft Lab2C Persist
  • 软件详细设计总复习(三)【太原理工大学】
  • Vue3(一):创建vue3工程、setup、vue3响应式原理、computed和watch
  • Spring中的@Value注解详解
  • YSL赢麻了?SMI社媒心智品牌榜Top20公布:YSL破局夺魁,国货品牌现后起之秀
  • 链式哈希,一致性哈希,倒排表
  • Python操作XML教程:读取、写入、修改和保存XML文档
  • Oracle数据库中了locked1勒索病毒,用友nchome配置文件损坏该如何解除
  • leecode 数据库: 602. 好友申请 II :谁有最多的好友
  • 基于 Prometheus 的 SLO告警实战
  • 调用百度API实现图像风格转换
  • 5个最好的WooCommerce商城自动化动作来增加销售量
  • 打开数据结构大门——实现小小顺序表
  • 一.RxJava
  • 如何使用 VSCode 软件运行C代码
  • C# 调用Matlab打包的 DLL文件(傻瓜式操作)