力扣:54. 螺旋矩阵(Python3)

题目:

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

来源:力扣(LeetCode)

链接:力扣

示例:

示例 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]

解法:

以顺时针螺旋遍历二维列表,将每次遍历到的元素存到result。首先,初始化row为len(matrix) - 1,表示最大行,初始化col为len(matrix[0]) - 1,表示最大列,初始化rh为1,表示行的起始位置为1,初始化ch为0,表示列的起始位置为1,初始化r、c为0,表示当前位置,初始化flag为1,表示当前状态。

一共有4种状态,第1种是从左到右遍历,第2种是从上到下遍历,第3种是从右到左遍历,第4种是从下到上遍历。遍历的总次数是元素的个数,4种状态循环切换,直到遍历完,以下以第1种状态为例,第2、3、4种状态同理。

进入第1种状态,首先将根据r、c把当前位置的值添加到result,然后判断是否走到最右边,注意,最右边指的是没有遍历的元素的最右边,通过col判断,如果没到最右边,则c自增1,如果到了,需要切换状态,并且将col自减1,表示缩小下次可遍历到的最右边,即去除已遍历元素,将r自增1,修改状态切换后的首位置。

代码:

python 复制代码
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        result = []
        row = len(matrix) - 1
        col = len(matrix[0]) - 1
        rh = 1
        ch = 0
        flag = 1
        r = c = 0
        for _ in range((row + 1) * (col + 1)):
            if flag == 1:
                result.append(matrix[r][c])
                if c == col:
                    col -= 1
                    r += 1
                    flag = 2
                else:
                    c += 1
            elif flag == 2:
                result.append(matrix[r][c])
                if r == row:
                    row -= 1
                    c -= 1
                    flag = 3
                else:
                    r += 1
            elif flag == 3:
                result.append(matrix[r][c])
                if c == ch:
                    ch += 1
                    r -= 1
                    flag = 4
                else:
                    c -= 1
            else:
                result.append(matrix[r][c])
                if r == rh:
                    rh += 1
                    c += 1
                    flag = 1
                else:
                    r -= 1
        return result
相关推荐
小白学大数据28 分钟前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
一只侯子43 分钟前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue1 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈1 小时前
Python数据结构
数据结构·算法·排序算法
头发还在的女程序员2 小时前
三天搞定招聘系统!附完整源码
开发语言·python
温轻舟2 小时前
Python自动办公工具06-设置Word文档中表格的格式
开发语言·python·word·自动化工具·温轻舟
花酒锄作田2 小时前
[python]FastAPI-Tracking ID 的设计
python·fastapi
J***79392 小时前
后端在分布式系统中的数据分片
算法·哈希算法
AI-智能2 小时前
别啃文档了!3 分钟带小白跑完 Dify 全链路:从 0 到第一个 AI 工作流
人工智能·python·自然语言处理·llm·embedding·agent·rag
Dream it possible!3 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试