LeetCode【0059】螺旋矩阵II

devtools/2024/11/14 22:18:35/

本文目录

  • 1 中文题目
  • 2 求解方法:数理逻辑
    • 2.1 方法思路
    • 2.2 Python代码
    • 2.3 复杂度分析
  • 3 题目总结

1 中文题目

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

示例:
在这里插入图片描述

python">输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
如上图所示。
python">输入:n = 1
输出:[[1]]

提示:

  • 1 ≤ n ≤ 20 1\leq n \leq 20 1n20

2 求解方法:数理逻辑

2.1 方法思路

方法核心

使用四个边界变量控制螺旋方向,按照从左到右、从上到下、从右到左、从下到上的顺序依次填充数字,每填充完一条边就收缩相应的边界,直到填充完所有数字为止。

实现步骤
(1)初始化阶段:

  • 创建 n x n 的空矩阵
  • 设置四个边界变量
  • 初始化填充数字为1

(2)螺旋填充过程:

  • 按照固定的顺序填充四条边
  • 每填充完一条边,更新对应的边界
  • 持续填充直到所有数字用完

(3)边界更新规则:

  • 填充完上边后,上边界下移
  • 填充完右边后,右边界左移
  • 填充完下边后,下边界上移
  • 填充完左边后,左边界右移

(4)填充结束条件:

  • 当填充数字超过 n 2 n^2 n2时停止,返回填充完成的矩阵

方法示例

n = 3 为例:

python">初始状态:
matrix = [[0,0,0],[0,0,0],[0,0,0]]
left = 0, right = 2
top = 0, bottom = 2
num = 1第一圈:
1. 填充上边 (left到right):matrix = [[1,2,3],[0,0,0],[0,0,0]]top = 12. 填充右边 (top到bottom):matrix = [[1,2,3],[0,0,4],[0,0,5]]right = 13. 填充下边 (right到left):matrix = [[1,2,3],[0,0,4],[7,6,5]]bottom = 14. 填充左边 (bottom到top):matrix = [[1,2,3],[8,0,4],[7,6,5]]left = 1最后一个数字:
填充中心位置:
matrix = [[1,2,3],[8,9,4],[7,6,5]]最终结果:
返回 [[1,2,3],[8,9,4],[7,6,5]]

2.2 Python代码

python">class Solution:def generateMatrix(self, n: int) -> List[List[int]]:# 初始化 n x n 的矩阵,填充0matrix = [[0] * n for _ in range(n)]# 定义四个方向的边界left, right = 0, n-1top, bottom = 0, n-1# 当前需要填充的数字num = 1# 循环直到填充完所有数字while num <= n*n:# 从左到右填充上边界for i in range(left, right + 1):matrix[top][i] = numnum += 1top += 1# 从上到下填充右边界for i in range(top, bottom + 1):matrix[i][right] = numnum += 1right -= 1# 从右到左填充下边界for i in range(right, left - 1, -1):matrix[bottom][i] = numnum += 1bottom -= 1# 从下到上填充左边界for i in range(bottom, top - 1, -1):matrix[i][left] = numnum += 1left += 1return matrix

2.3 复杂度分析

  • 时间复杂度: O ( n 2 ) O(n²) O(n2)
    • 需要填充 n × n n×n n×n个格子
    • 每个格子只会被访问一次
    • 所有操作都是常数时间
  • 空间复杂度:O(1)
    • 只使用了固定数量的变量

3 题目总结

题目难度:中等
数据结构:数组
应用算法数理逻辑


http://www.ppmy.cn/devtools/134010.html

相关文章

汇编分析C++class

文章目录 this指针不神奇静态成员方法构造函数拷贝构造和移动构造运算符重载拷贝赋值和移动赋值多态机制虚函数虚表对象怎么获取虚表构造函数禁止为虚函数继承体系中析构函数必为虚函数模板对CPU不可见malloc和newfree和delete请配对new和deletefree如何确定释放空间的大小this…

IntelliJ+SpringBoot项目实战(八)--在控制层API中封装响应数据包

在控制层类的接口中一般需要返回响应结果的数据包&#xff0c;如果采用接口返回类型设置为JSONObject,比如 public JSONObject getUserList...){ JSONObject json new JSONObject(); } 通过使用json.put("","")的方式手工设置返回值会比较繁琐&#xf…

图形 2.6 伽马校正

伽马校正 B站视频&#xff1a;图形 2.6 伽马校正 文章目录 伽马校正颜色空间传递函数 Gamma校正校正过程为什么需要校正&#xff1f;CRT与转换函数 为什么sRGB在Gamma 0.45空间&#xff1f; 人对亮度的敏感韦伯定律中灰值 线性工作流不在线性空间下进行渲染的问题统一到线性空…

数据库SQL——连接表达式(JOIN)图解

目录 一、基本概念 二、常见类型 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; 左连接&#xff08;LEFT JOIN 或 LEFT OUTER JOIN&#xff09;&#xff1a; 右连接&#xff08;RIGHT JOIN 或 RIGHT OUTER JOIN&#xff09;&#xff1a; 全连接&#xff08;FULL…

LabVIEW导入并显示CAD DXF文件图形 程序见附件

LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用&#xff0c;LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…

Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分&#xff0c;考虑后Diffusion Policy的重要性很高&#xff0c;加之后续还有一系列基于其的改进工作 故独立成本文&#xff0c;且写的过程中 …

uni-app收藏按钮组件实现⑬

文章目录 二十一、收藏按钮组件实现一、前端处理二、云函数定义获取数据后前端处理 二十一、收藏按钮组件实现 一、前端处理 收藏图标点击事件内获取用户信息&#xff0c;及文章信息&#xff0c;传递到后端 由于多个界面中都会用到 userInfo 对象&#xff0c;可将 userInfo 对…

机器学习在网络安全中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 机器学习在网络安全中的应用 机器学习在网络安全中的应用 机器学习在网络安全中的应用 引言 机器学习概述 定义与原理 发展历程 …