力扣:59. 螺旋矩阵 II(Python3)

题目:

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

来源:力扣(LeetCode)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:n = 3

输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1

输出:[[1]]

解法:

创建全0二维列表,根据顺时针螺旋顺序修改值。

首先,初始化row为n - 1,表示当前可以遍历到的最大行,初始化col为n - 1,表示当前可以遍历到的最大列,初始化rh为1,表示当前可以遍历到的行最小值为1,初始化ch为0,表示当前可以遍历到的列的最小值为0,初始化r、c为0,表示当前位置,初始化flag为1,表示当前状态。

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

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

知识点:

**1.初始化二维列表:**比如创建并初始化全0二维列表:result = [[0] * n for _ in range(n)],不要使用result = [[0] * n] * n,因为这样在修改值的时候,会把每列都修改。原因是因为Python的机制,*n并没有开辟新空间,都指向同一块内存,但加上[]会将括号内部看作一个整体,列表类型,开辟独立的空间。

代码:

python 复制代码
class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        result = [[0] * n for _ in range(n)]
        row = col = n - 1
        rh = 1
        ch = 0
        flag = 1
        r = c = 0
        for num in range(n ** 2):
            if flag == 1:
                result[r][c] = num + 1
                if c == col:
                    col -= 1
                    r += 1
                    flag = 2
                else:
                    c += 1
            elif flag == 2:
                result[r][c] = num + 1
                if r == row:
                    row -= 1
                    c -= 1
                    flag = 3
                else:
                    r += 1
            elif flag == 3:
                result[r][c] = num + 1
                if c == ch:
                    ch += 1
                    r -= 1
                    flag = 4
                else:
                    c -= 1
            else:
                result[r][c] = num + 1
                if r == rh:
                    rh += 1
                    c += 1
                    flag = 1
                else:
                    r -= 1
        return result
相关推荐
当归10244 分钟前
接雨水的算法
android·java·算法
小白教程12 分钟前
Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程
数据库·python·mysql·python链接数据库·python链接mysql
weixin_3077791313 分钟前
PySpark实现GROUP BY WITH CUBE和WITH ROLLUP的分类汇总功能
大数据·开发语言·python·spark
不太会写43 分钟前
基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统
python·推荐算法
IT猿手1 小时前
2025高维多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
开发语言·人工智能·算法·机器学习·matlab·无人机·cocos2d
呱牛do it1 小时前
Python Matplotlib图形美化指南
开发语言·python·matplotlib
pianmian11 小时前
python制图之小提琴图
开发语言·python·信息可视化
橙子小哥的代码世界1 小时前
【机器学习】【KMeans聚类分析实战】用户分群聚类详解——SSE、CH 指数、SC全解析,实战电信客户分群案例
人工智能·python·机器学习·kmeans·数据科学·聚类算法·肘部法
计算机徐师兄1 小时前
Python基于Flask的豆瓣Top250电影数据可视化分析与评分预测系统(附源码,技术说明)
python·flask·豆瓣top250电影数据可视化·豆瓣top250电影评分预测·豆瓣电影数据可视化分析系统·豆瓣电影评分预测系统·豆瓣电影数据
k layc1 小时前
【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》
人工智能·python·机器学习·语言模型·自然语言处理·大模型推理