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

力扣: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 - 1rh = 1ch = 0flag = 1r = c = 0for num in range(n ** 2):if flag == 1:result[r][c] = num + 1if c == col:col -= 1r += 1flag = 2else:c += 1elif flag == 2:result[r][c] = num + 1if r == row:row -= 1c -= 1flag = 3else:r += 1elif flag == 3:result[r][c] = num + 1if c == ch:ch += 1r -= 1flag = 4else:c -= 1else:result[r][c] = num + 1if r == rh:rh += 1c += 1flag = 1else:r -= 1return result

http://www.lryc.cn/news/121120.html

相关文章:

  • 【electron】electron项目创建的方式:
  • Vim学习(一)——基本命令与三种模式
  • unity新输入系统的简单使用(New InputSystem)
  • Redis——特性介绍与应用场景
  • 网络:路由
  • 利用三维内容编辑器制作VR交互课件,简单好用易上手
  • 中国首款量子计算机操作系统本源司南 PilotOS正式上线
  • 基层社会治理平台建设方案[113页PPT]
  • 认识vite
  • 华为运动健康,十年创新天地宽
  • 深度学习(37)—— 图神经网络GNN(2)
  • Unity游戏源码分享-乐节奏休闲游戏源码 guitar hero 支持mobile
  • VS Code配置Prettier格式化Apex
  • Spring-Cloud-Loadblancer详细分析_4
  • openocd调试esp32(通过FT232H)
  • Nokia5110使用方法及实例编写51单片机
  • 3个月快速入门LoRa物联网传感器开发
  • 【小梦C嘎嘎——启航篇】内存管理小知识~
  • ClickHouse查看执行计划(EXPLAIN语法)
  • 线程池
  • 配置:Terminal和oh-my-posh
  • 数据结构--BFS求最短路
  • FPGA应用学习笔记----定点除法的gold算法流水线设计
  • Nginx转发的原理和负载均衡
  • 怎么换ip地址 电脑切换ip地址方法
  • 软件设计基础
  • OptaPlanner笔记5
  • PS注意事项优漫动游
  • matplotlib 判断鼠标是否点击在当前线上
  • bash中(冒号破折号)的用法 —— 筑梦之路