59.螺旋矩阵II 

螺旋矩阵没有什么算法,就是一道单纯模拟转圈的一道题目,因为转圈的过程需要处理的边界条件很多,所以有难度

那只能从第二个节点开始处理;从第二个节点开始处理,把最后一个节点也处理了(第二条边的处理不包含第一个节点)………………如果处理每条边的时候节点规则都不一样,要考虑的边界条件太多,而且极其容易把自己绕进去……

正确思路:

之前在讲二分法的时候就讲到了循环不变量,那我们在做螺旋矩阵的时候同样要遵循循环不变量的原则。

循环是一圈一圈的循环,不变量则是我们对每条边的处理原则,要坚持一个规则来处理每一条边。

此处按照左闭右开的规则来遍历这一圈

在处理边的时候,只处理第一个节点,最后一个节点不处理;遍历下一条边时,也只处理一个节点,最后一个节点不处理;最后一个节点要留给下一条边来处理;下一条边也是处理第一个节点,往后一直遍历,遍历到倒数第二个节点,这就是左闭右开。

把最后一个节点留给下一条边,作为下一条边的起始位置,大家会发现我转一圈,其实是坚持一个原则,这都是左闭右开,这样我四条边的遍历规则就统一了,把规则统一之后,代码就很好写了。

思路:

#这个循环应该转几圈,应该转n/2这么多圈
#如果n是奇数,例如:3/2=1,也就是转了一圈,还剩下中间的位置如何处理? 只需要最后判断一下
#如果这个n是奇数计算(n%2)==1,如果是奇数,我们对所填充的数组进行单独赋值,将最后一个数字填进去#进入循环后,每一圈的起始位置不可能是一个固定的数,可以定义一个 start x=0,再定义一个start y=0   
#这样我们就定义了一个起起始位置是每一圈都要变的每一圈都要变的,所以我们定义了一个变量,专门来放起始位置。
#起始位置的定义[start x][ start y] =[i][j]offset = 1
count =  1
while(n/2)for (j= starty ;j<n-offset;j++){nums[startx][j] = count++;}#j小于终止位置,终止位置不包含最后一个元素。终止位置也是随着我们而改变的。所以还需要一个变量来定义它的终止位置。这样我们就遍历了第一行。然后对其他元素进行填充。Count是用来计数的,初始值也为一;循环完毕之后j已经等于n减offset。此时j。已经指向第一行的最后一个元素,此时j的值是固定的。到这里第一条横向边遍历完毕,开始遍历第二条(竖)边。这竖向条边的下标为j坐标是(i,j)这么定义的。for (i= startx ;i<n-offset;i++){nums[i][j] = count++;}然后遍历下方一条横向边。我们修改的又是j的值;这里j等于n减offset。此时j这个值不需要初始化,因为我们所遍历的这个坐标已经走到这个节点了。i和j都是矩阵中的最大值。此时需要知道j的终点在哪里?J>starty,因为我们不处理他的终点位置,坚持左闭右开的原则。for (;j>starty;j--){nums[i][j] = count++;}最后这条边遍历的时候,i已经是最大值。i向上遍历应该大于Startx;这里的每一条边所坚持的原则都是只处理第一个节点,不处理最后一个节点。for (;i>starty;i--){nums[i][j] = count++;}那么我们每转一圈,这个start x和starty,都应该加一;此时结束位置由n-1变为n-2。offset由1变为2。                                    startx++starty++offset++
if ((n%2)==1){nums[i][j] = count
}
python代码

代码随想录 (programmercarl.com)

class Solution:def generateMatrix(self, n: int) -> List[List[int]]:startx,starty = 0,0mid = n//2count = 1matrix = [[0]*n for _ in range(n)]for offset in range(1,mid+1) :for j in range(starty,n-offset):matrix[startx][j] = countcount += 1for i in range(startx,n-offset):matrix[i][n-offset] = countcount += 1for j in range(n-offset,starty,-1):matrix[n-offset][j] = countcount += 1for i in range(n-offset,startx,-1):matrix[i][starty] = countcount += 1starty += 1startx += 1if n%2 != 0:matrix[mid][mid] = countreturn matrix
python如何进行模计算?

在Python中,模计算(也称为取模运算或求余运算)是通过 % 操作符实现的。模计算通常用于求出一个数除以另一个数的余数。这里有一个基本的例子来展示如何在Python中进行模计算:

# 示例:计算10除以3的余数
result = 10 % 3print(result)  # 输出: 1


模计算经常用于判断一个数是否可以被另一个数整除(如果余数为0,则可以整除),以及循环索引的计算(如循环遍历数组时,将索引保持在数组长度内的操作)。
注意事项
当使用负数进行模计算时,Python的结果可能与其他编程语言不同。在Python中,结果的符号与被除数(左边的操作数)相同。
# 负数模计算的例子

print(-10 % 3)  # 输出: -1,因为余数的符号与被除数相同
print(10 % -3)  # 输出: 1,因为余数的符号与被除数相同


当你尝试用0作为除数进行模计算时,Python会抛出一个ZeroDivisionError。

nums = [[0] * n for _ in range(n)]

Python中的一个列表推导式(list comprehension),用于创建一个二维列表(或称为矩阵),其大小为n×n,并且初始时所有元素都被初始化为0。这里的n是一个已经定义好的整数,表示矩阵的行数和列数

for _ in range(n): 这是一个循环,循环n次。这里的_是一个常用的占位符,表示我们不关心循环的当前迭代值(索引)。range(n)生成一个从0到n-1的序列,但由于我们不需要这个序列的具体值,所以使用_来忽略它

  • [0] * n: 这部分创建了一个长度为n的列表,其中包含n个0。这个列表是二维列表中的一行。

  • [[0] * n for _ in range(n)]: 将上述两部分结合起来,对于每一次外层循环(循环n次),都创建一个长度为n、所有元素为0的列表。这些列表(即矩阵的行)被收集到一个更大的列表中,形成了n×n的二维列表(矩阵)

  • 简单来说,这行代码就是创建了一个n行n列的二维列表,其中每个元素都被初始化为0。这种结构在编程中非常常见,特别是在需要处理二维空间数据(如图像、网格等)时。

列表生成式

列表生成式(List Comprehension)是Python中一种简洁高效创建列表的方式。它允许你通过一个表达式来生成列表,这个表达式可以是任何有效的Python表达式,并且可以包含循环、条件语句等。列表生成式的基本语法如下:

[expression for item in iterable if condition]
  • expression:这是一个关于当前元素的表达式,用于生成列表中的新元素。
  • for item in iterable:这是一个for循环,遍历可迭代对象(如列表、元组、字符串、集合、字典等)中的每个元素。
  • if condition(可选):这是一个条件表达式,用于过滤掉那些不满足条件的元素。只有当条件为真时,当前元素才会被包含在结果列表中。
  • squares = [x**2 for x in range(10)]  
    print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]even_squares = [x**2 for x in range(10) if x % 2 == 0]  
    print(even_squares)  # 输出: [0, 4, 16, 36, 64]keys = ['a', 'b', 'c']  
    values = [1, 2, 3]  
    dict_comprehension = {k: v for k, v in zip(keys, values)}  
    print(dict_comprehension)  # 输出: {'a': 1, 'b': 2, 'c': 3}matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
    flattened = [num for row in matrix for num in row]  
    print(flattened)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

 //运算符:

在Python中,// 运算符被称为整数除法(也称为地板除)运算符。它执行除法运算,但结果总是向下取整到最接近的整数,即使结果是一个负数。这与传统的除法(使用 / 运算符)不同,后者在Python 3中对于整数和浮点数都会返回一个浮点数结果。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MS SQL(Microsoft SQL Server)面试常考的知识点

MS SQL是Microsoft SQL Server的简称&#xff0c;是由微软公司开发的一款关系型数据库管理系统&#xff08;RDBMS,Relational DataBase Management System&#xff09;。它支持在Windows和Linux上运行&#xff0c;广泛应用于企业级数据库市场&#xff0c;适用于大型企业网站和应…

百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革

8月28日&#xff0c;由深圳市智慧零售协会主办的第七届中国智慧零售大会在深圳福田希尔顿酒店成功召开。本届大会以“聚势AI共启智慧零售新生态”为主题&#xff0c;汇聚了来自北京大学、腾讯云、百果园、舍得酒业、美宜佳等众多知名企业与机构的专家代表&#xff0c;共同探讨A…

QEMU使用Qemu-Guest-Agent传输文件、执行指令等

简介 之前介绍过qemu传输文件,使用的挂载 / samba方式 :Qemu和宿主机不使用外网进行文件传输。 这是一种方式,这里还有另一种方式:使用Qemu-Guest-Agent,后面简称qga。 官网介绍:https://www.qemu.org/docs/master/interop/qemu-ga.html 安装 这里有一篇参考文章,会…

HTML 核心标签全解析:从文本排版到媒体嵌入

在网页开发中&#xff0c;HTML&#xff08;超文本标记语言&#xff09;是构建页面结构的基石。掌握各类核心标签的用法&#xff0c;是实现页面内容有序呈现、提升用户体验的关键。本文将系统讲解 HTML 中最常用的几类标签 —— 段落标签、文本格式标签、列表标签、表格&#xf…

[后端快速搭建]基于 Django+DeepSeek API 快速搭建智能问答后端

在 AI 应用开发中&#xff0c;将大模型 API 与 Web 框架结合是常见需求。本文将详细记录如何使用 Django 搭建后端服务&#xff0c;并集成 DeepSeek API 实现智能问答功能&#xff0c;包含环境配置、路由设计、API 调用及异常处理的完整流程&#xff0c;适合需要快速搭建 AI 问…

R 语言 + 卒中 Meta 分析

R 语言 卒中 Meta 分析&#xff1a;4 类核心场景完整代码&#xff08;含药物对比 / 剂量风险&#xff09; 卒中&#xff08;缺血性 / 出血性&#xff09;的临床决策高度依赖循证证据&#xff0c;而 Meta 分析是整合多中心研究结果的核心工具。本文以卒中临床研究为核心&#x…

Goframe 框架下HTTP反向代理并支持MCP所需的SSE协议的实现

一、需求背景 Go 语言开发 MCP 服务&#xff0c;并在 Goframe 框架下实现 Http 反向代理&#xff0c;代理该 MCP 服务。 二、效果演示 三、Goframe框架简介 GoFrame 是一款模块化、低耦合设计、高性能的Go 语言开发框架。包含了常用的基础组件和开发工具&#xff0c;既可以作…

Git将多笔patch合并成一笔

一、方法1、在你的代码中把这多笔patch都打上2、git reset到origin那一笔(默认模式&#xff0c;不带soft或者hard)3、再add和commit&#xff0c;push二、种模式对比模式命令示例影响范围适用场景--softgit reset --soft HEAD~1仅移动 HEAD&#xff0c;保留修改在暂存区修改提交…

【SpringBoot】Dubbo、Zookeeper

文章目录前提知识概要分布式系统单体架构垂直应用架构分布式架构流式架构RPCDubbo概念Dubbo环境搭建Zookeeper测试 ZookeeperWindow环境下使用Dubbo-admin版本匹配不对服务注册实战内容总结导入相关依赖选择 Zookeeper 版本配置并启用 Zookeeper创建服务接口和实现(DubboServic…

【不说废话】pytorch张量相对于numpy数组的优势

核心关系 我们首先需要了解&#xff1a;PyTorch 张量在设计上深受 NumPy 数组的影响&#xff0c;它们共享许多相似的 API 和概念。实际上&#xff0c;PyTorch 张量可以看作是支持 GPU 加速和自动求导功能的 NumPy 数组。PyTorch 张量的主要优势 1. GPU 加速支持&#xff08;最重…

拼团小程序源码分享拼团余额提现小程序定制教程开发源码二开

功能详细说明&#xff08;一&#xff09;首页功能进入首页&#xff0c;可看到以下核心功能&#xff1a;1、优惠券&#xff0c;钱包&#xff0c;签到&#xff0c;拼团&#xff0c;分销等各种功能入口2、推荐的商品和活动3、下方功能栏的各种功能&#xff08;二&#xff09;客服功…

pikachu之XSS

XSS&#xff08;跨站脚本&#xff09;概述Cross-Site Scripting 简称为“CSS”&#xff0c;为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c;故又称XSS。一般XSS可以分为如下几种常见类型&#xff1a;1.反射性XSS;2.存储型XSS;3.DOM型XSS;XSS漏洞一直被评估为web漏…

【Element Plus `el-select` 下拉菜单响应式定位问题深度解析】

Element Plus el-select 下拉菜单响应式定位问题深度解析 本文档旨在深入剖析一个在响应式布局中常见的 UI 问题&#xff1a;如何确保一个靠近屏幕边缘的 el-select 组件的下拉菜单&#xff0c;在任何屏幕尺寸下都能以预期的、优雅的方式显示。 1. 需求背景 在一个大屏数据展示…

Qt 项目文件(.pro)中添加 UI 文件相关命令

在 Qt 的 .pro 项目文件中&#xff0c;处理 UI 文件&#xff08;.ui 文件&#xff09;通常需要以下配置&#xff1a; 基本 UI 文件配置 自动包含 UI 文件&#xff1a; qmake FORMS yourfile.ui \anotherfile.ui Qt 构建系统会自动使用 uic&#xff08;用户界面编译器&#xff…

展会回顾 | 聚焦医疗前沿 , 礼达先导在广州医博会展示类器官自动化培养技术

8月22-24日&#xff0c;广州医博会在广交会展馆B区圆满落幕。此次盛会汇聚了来自全球医疗健康领域的顶尖专家学者、企业代表与合作伙伴。展会内容涵盖基础研发、临床应用、前沿技术、产业转化、医疗服务及金融支持&#xff0c;全景呈现医疗健康产业的创新生态&#xff0c;成为连…

华为eNSP防火墙综合网络结构训练.docx

1.IP及VLAN规划情况 设备 接口 IP vlan 备注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通

在当前企业数字化转型的浪潮中&#xff0c;打破数据孤岛、实现异构数据库间的数据高效流转已成为提升业务敏捷性与决策效率的关键。许多企业在要将 Oracle 数据库中的海量数据准确地同步至TiDB 分布式数据库时遇到了挑战。这一过程不仅要求数据的绝对一致性&#xff0c;还对同步…

Effective c++ 35条款详解

您问到了最关键的一点&#xff01;这正是策略模式的精妙之处——它通过组合&#xff08;composition&#xff09;而非继承&#xff08;inheritance&#xff09;来实现多态效果。让我详细解释这是如何工作的&#xff0c;以及它与传统继承多态的区别。&#x1f504; 策略模式如何…

51c自动驾驶~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首个基于Mamba的端到端运动规划器 运动规划是一项具有挑战性的任务&#xff0c;在高度动态和复杂的环境中生成安全可行的轨迹&#xff0c;形成自动驾驶汽车的核心能力。在本文中&#xff0c;我…

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…