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

题目:

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 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并没有开辟新空间,都指向同一块内存,但加上[]会将括号内部看作一个整体,列表类型,开辟独立的空间。

代码:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/68791.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

日期切换

组件&#xff1a;<template><div class"time-picker"><el-radio-group size"small" v-model"timeType" change"changePickerType"><el-radio-button label"hour" v-if"isShow">时</el…

Open_PN笔记

>>>仅用作学习用途 1.准备好需要用到的工具 官网下载地址&#xff1a; openvpn 客户端下载地址&#xff1a; https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.5-I601.exe EasyRSA下载地址&#xff1a; https://githu…

Koan自动重装和Cobbler_web

Koan是Cobbler的辅助工具&#xff0c;可以实现很多功能&#xff0c;使用koan配合Cobbler可以实现快速重装Linux系统&#xff1a; 1、安装koan&#xff1a; yum install -y epel-releaseyum install -y koan 安装截图&#xff1a; 2、在客户机上&#xff0c;用koan选择要重装的…

可以重复烧写的语音ic有哪些特征和优势

目录 一、简介可擦写的语音芯片&#xff0c;其实就是MCUflash的架构&#xff0c;无其他说法&#xff0c;就这一种说法。这个就是它最大的特征尤其是SOP8的封装类型的芯片&#xff0c;是区别于OTP类型的另一个品类&#xff0c;基本上OTP的语音芯片适用的场景。他都可以满足和替代…

文件系统目录结构

1. 目录结构 linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录/ &#xff0c;然后在此目录下再创建其他的目录。 在linux中&#xff0c;一切皆文件(Linux将所有的设备、文件、进程等都当做文件来处理) 2. 目录作用具体介绍 目录名解析/b…

js玩儿爬虫

前言 提到爬虫可能大多都会想到python&#xff0c;其实爬虫的实现并不限制任何语言。 下面我们就使用js来实现&#xff0c;后端为express&#xff0c;前端为vue3。 实现功能 话不多说&#xff0c;先看结果&#xff1a; 这是项目链接&#xff1a;https://gitee.com/xi1213/w…

【云原生】kubernetes中容器的资源限制

目录 1 metrics-server 2 指定内存请求和限制 3 指定 CPU 请求和限制 资源限制 在k8s中对于容器资源限制主要分为以下两类: 内存资源限制: 内存请求&#xff08;request&#xff09;和内存限制&#xff08;limit&#xff09;分配给一个容器。 我们保障容器拥有它请求数量的…

【Spring专题】Spring之Bean的生命周期源码解析——阶段一(扫描生成BeanDefinition)

目录 前言阅读指引阅读建议 课程内容一、生成BeanDefinition1.1 简单回顾1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 ClassPathBeanDefinitionScanner#scan2.2 ClassPathBeanDefinitionScanner#doScan2.3 ClassPathScanningCandidateComponentProvider#findCandidateCompon…

SpringBoot 整合JDBC

SpringData简介 Sping Data 官网&#xff1a;https://spring.io/projects/spring-data数据库相关的启动器 &#xff1a;可以参考官方文档&#xff1a;https://docs.spring.io/spring-boot/docs/2.6.5/reference/htmlsingle/#using-boot-starter 整合JDBC 创建测试项目测试数据…

访企聚力促创新:长安大学来访闪马智能

7月31日&#xff0c;长安大学运输工程学院院长葛颖恩教授、学院副书记李婷以及学办主任董彬一行来访闪马智能&#xff0c;闪马智能创始人兼CEO彭垚、城市交通行业总经理兼营销副总裁詹诚以及公共交通行业总经理熊天圣等出席了本次交流会。 长安大学运输工程学院院长葛颖恩教授…

人人都是系统装机高手,利用windows官方的工具,安装超简单

前言 电脑出故障了或者C盘文件饱满、电脑系统卡顿&#xff0c;第一个想法就是重装系统&#xff0c;在网上搜一下&#xff0c;各种重装系统的镜像层出不穷&#xff0c;该怎么去选择呢&#xff1f;我适合很多方法&#xff0c;最后选择了微软官方的系统安装工具。因为系统纯净&am…

LeetCode209. 长度最小的子数组

题目&#xff1a;LeetCode209. 长度最小的子数组 描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子…

渠道订货管理:品牌商建立渠道连接的纽带

当品牌商&#xff08;厂商&#xff09;渠道拓展到一定规模&#xff0c;处理不同渠道交易数据&#xff0c;面对信息流、物流、资金流链路&#xff0c;提升厂商端、经销商端、终端门店的订货体验就会变得尤为重要&#xff0c;特别是一些实力级厂商&#xff0c;渠道下沉能够掌握终…

[保研/考研机试] KY56 数制转换 北京大学复试上机题 C++实现

题目链接&#xff1a; 数制转换https://www.nowcoder.com/share/jump/437195121691734210665 描述 求任意两个不同进制非负整数的转换&#xff08;2进制&#xff5e;16进制&#xff09;&#xff0c;所给整数在long所能表达的范围之内。 不同进制的表示符号为&#xff08;0&a…

Paragon NTFS15安装包下载免费版ntfs磁盘读写工具

Paragon NTFS for Mac 15 简体中文标准版轻量级的快捷菜单&#xff0c;可执行挂载、卸载和验证操作。软件设计优秀&#xff0c;与 macOS 无缝衔接&#xff0c;操作简单。轻量级的快捷菜单&#xff0c;可执行挂载、卸载和验证操作。软件设计优秀&#xff0c;与 macOS 无缝衔接&a…

安卓13不再支持PPTP怎么办?新的连接解决方案分享

随着Android 13的发布&#xff0c;我们迎来了一个令人兴奋的新品时刻。然而&#xff0c;对于一些用户而言&#xff0c;这也意味着必须面对一个重要的问题&#xff1a;Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户&#xff0c;那么你可能需要重…

【BASH】回顾与知识点梳理(二十二)

【BASH】回顾与知识点梳理 二十二 二十二. Linux 账号管理22.1 Linux 的账号与群组使用者标识符&#xff1a; UID 与 GID使用者账号/etc/passwd 文件结构/etc/shadow 文件结构 关于群组&#xff1a; 有效与初始群组、groups, newgrp/etc/group 文件结构有效群组(effective grou…

技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?

LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2&#xff08;Web&#xff09;与 Vue3&#xff08;VSCode、lDEA&#xff09;中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码&#xff0c;还能为后续升级 Vue3 减少一定阻碍。 那么&#xff0c;同时兼容 Vue…

爬虫017_urllib库_get请求的quote方法_urlencode方法_---python工作笔记036

按行来看get请求方式 比如这个地址 上面这个地址复制粘贴过来以后 可以看到周杰伦变成了一堆的Unicode编码了 所以这个时候我们看,我们说https这里,用了UA反爬,所以这里 我们构建一个自定义的Request对象,里面要包含Us

【kubectl详解】

目录 一、陈述式资源管理方法二、基本信息查看1、查看 master 节点状态2、查看命名空间3、查看命名空间的所有资源4、创建命名空间app5、删除命名空间app6、在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-dz&#xff09;…