刷题第2天(中等题):LeetCode59--螺旋矩阵--考察模拟能力(边界条件处理)

LeetCode59:

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

示例 1:

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

示例 2:

输入:n = 1
输出:[[1]]

提示:1 <= n <= 20

思路分析: 这道题目不考具体的算法,纯模拟过程,考察对边界条件的处理和对代码的掌控能力。

模拟顺时针画矩阵的过程:

1.填充上行从左到右

2.填充右列从上到下

3.填充下行从右到左

4.填充左列从下到上

由外向内这样一圈一圈画下去,画每一条边都必须坚持左闭右开原则。

代码:

class Solution:
    def generateMatrix(self, n: int)-> List[List[int]]:
        nums = [[0] * n for _ in range(n)]  # 创建一个长度为n,值均为0的列表
        startx, starty = 0, 0  # 起始点为[0,0]
        loop, mid = n // 2, n // 2  # 整除2,设置循环的层数(往里缩一圈需要减少2个位置)、n为奇数时; 矩阵的中心点
        count = 1  # 计数

        for offset in range(1, loop + 1):  # 每循环一层偏移量加1, 偏移量从1开始

            for i  in range(starty, n - offset):  # 设置上行,从左至右,左闭右开
                nums[startx][i] = count  # 行标不变,列标递增
                count += 1  # 计数递增

            for i in range(startx, n - offset):  # 设置右列,从上至下,左闭右开
                nums[i][n - offset] = count  # 列标不变,行标递增
                count += 1 # 计数递增

            for i in range(n - offset, starty, -1):  # 设置下行,从右至左,左闭右开
                nums[n - offset][i] = count  # 行标不变(下行行标为n-offset,动态变化),列标递增
                count += 1 # 计数递增
            
            for i in range(n - offset, startx, -1):  # 设置左列,从下至上,左闭右开
                nums[i][starty] = count  # 列坐标是starty, 而不是n-offset哦!
                count += 1 # 计数器递增
            
            startx += 1
            starty += 1  # 注意循环完一圈后,startx, starty都要加1哦
        
        if n % 2 != 0:  # 当n为奇数时,填充中心点
            nums[mid][mid] = count  # 因为上面每次赋值完,count都会后加1,所以直接赋值就好了
        return nums  # 返回排列好的矩阵
                


        

总结:处理边界需要严格按照左闭右开的原则,另外理解loop怎么算也很关键。上述代码的注释写的非常详细,复习时应精读来理解整个过程。

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

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

相关文章

Appium手机Android自动化

目录 介绍 什么是APPium&#xff1f; APPium的特点 环境准备 adb(android调试桥)常用命令 appium图形化简单使用 连接手机模拟器 使用appium桌面端应用程序 ​编辑 整合java代码测试 环境准备 引入所需依赖 书写代码简单启动 ​编辑 Appium元素定位 id定位 介…

docker版本 jenkins配置gitlab自动部署

前端项目 Build steps pwd npm config set registry https://registry.npm.taobao.org npm -v node -v #npm install npm run build:prod tar -czvf QASystem.tar.gz distpwd cd /data/zhouxy37/vue_deploy tar -zxvf QASystem.tar.gz sudo mv dist QASystem cp -r QASyste…

Matlab: Introduction to Hybrid Beamforming

文章目录 来源混合波束赋形的基本概念System Setup关键函数 来源 在matlab的命令行输入 doc hybrid beamforming 混合波束赋形的基本概念 混合波束形成简介 本例介绍了混合波束形成的基本概念&#xff0c;并说明了如何模拟这种系统。 现代无线通信系统使用空间复用来提高散…

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

Linux入门攻坚——16、Linux系统启动流程

CentOS5、6的启动流程 Linux&#xff1a;kernel rootfs&#xff0c;Linux系统就是内核加上根文件系统。 内核之上是库&#xff1a; 库&#xff1a;函数集合&#xff0c;function&#xff0c;函数具有调用接口&#xff0c;库函数不能单独执行&#xff0c;必须被其他程序调用…

管理系统提升:如何从用户体验设计上发力

一、关于用户体验 管理系统的用户体验&#xff08;User Experience, UX&#xff09;是指用户在使用管理系统时所感受到的整体体验&#xff0c;包括用户对系统界面、交互、功能、性能等方面的感受和评价。一个好的管理系统的用户体验应该是简单易用、高效快捷、信息清晰、界面美…

Redis冲冲冲——Redis的主从复制,哨兵模式以及SpringBoot的配置

目录 引出Redis的主从复制&#xff0c;哨兵模式以及SpringBoot的配置Redis的主从复制Redis的哨兵模式SpringBoot配置 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——Redis的主从复制&#xff0c;哨兵模式以及SpringBoot的配置…

Matlab进阶绘图第41期—双三角网格曲面图

在《Matlab论文插图绘制模板第67期—三角网格图(Trimesh)》中&#xff0c;我分享过三角网格曲面图的绘制模板。 然而&#xff0c;有的时候&#xff0c;需要在一张图上绘制两个及以上的三角网格曲面图&#xff0c;且每个三角网格曲面图使用不同的配色方案。 在Matlab中&#x…

上线服务时遇到的一个SSLHandshakeException错误

今天部署自己的一个程序&#xff0c;在本地是可以正常跑通流程了&#xff0c;但是部署到服务器上运行之后出现了如下错误。 Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) at sun.sec…

s-table和columns初始化不完整,造成table文件的filter报错

问题 顺藤摸瓜找errorHandler.js文件 发现文件并没有什么问题 顺藤摸瓜找index.vue文件 首先找到报错的filter&#xff0c;发现与columnsSetting相关 找到columnsSetting发现等于columns 返回自己使用S-table组件的地方&#xff0c;发现columns初始化时仅初始化为ref()未表明…

Zoho Bigin 2024新功能预览:小企业CRM大热卖!

目前&#xff0c;市面上大多数CRM客户关系管理软件功能复杂&#xff0c;层级多&#xff0c;涵盖从市场营销、销售过程管理再到售后服务的完整客户生命周期。很多功能小微企业在当前阶段用不上&#xff0c;所以不愿意为用不上的功能和服务付费&#xff0c;市场上真正适合小微企业…

机器人内部传感器阅读梳理及心得-速度传感器-数字式速度传感器

在机器人控制系统中&#xff0c;增量式编码器既可以作为位置传感器测量关节相对位置&#xff0c;又可作为速度传感器测量关节速度。当作为速度传感器时&#xff0c;既可以在模拟量方式下使用&#xff0c;又可以在数字量方式下使用。 模拟式方法 在这种方式下&#xff0c;需要…

美国1月PCE数据出炉,5月降息成泡影?

KlipC报道&#xff1a;周三&#xff0c;美国商务部发布的数据显示&#xff0c;美国四季度核心个人消费支出(PCE)物价指出环比修正值为2.1%&#xff0c;超市场预期。剔除食品和能源的核心PCE指数走高2.1%。两者均略高于预估初值。数据发布后&#xff0c;美元指数短线小幅走低&am…

如何在宝塔面板中设置FTP文件传输服务并实现远程文件管理

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能&#xff0c;用于设置和管理FTP服务。通过宝塔FTP&#xff0c;用户可以创建FTP账号&#xff0c;配置FTP用户权限…

Linux小项目:在线词典开发

在线词典介绍 流程图如下&#xff1a; 项目的功能介绍 在线英英词典项目功能描述用户注册和登录验证服务器端将用户信息和历史记录保存在数据中。客户端输入用户和密码&#xff0c;服务器端在数据库中查找、匹配&#xff0c;返回结果单词在线翻译根据客户端输入输入的单词在字…

如何将动态IP代理转换为静态IP代理的方法与步骤

目录 前言 一、什么是动态IP代理 二、为什么需要静态IP代理 三、如何将动态IP代理转换为静态IP代理 步骤一&#xff1a;购买静态IP地址 步骤二&#xff1a;配置代理服务器 步骤三&#xff1a;验证静态IP代理 步骤四&#xff1a;测试代理服务器 四、代码示例 五、总结…

代理IP安全问题:在国外使用代理IP是否安全

目录 前言 一、国外使用代理IP的安全风险 1. 数据泄露 2. 恶意软件 3. 网络攻击 4. 法律风险 二、保护国外使用代理IP的安全方法 1. 选择可信的代理服务器 2. 使用加密协议 3. 定期更新系统和软件 4. 注意网络安全意识 三、案例分析 总结 前言 在互联网时代&…

C++如何跨模块释放内存

这篇文章主要为大家详细介绍了C中跨模块释放内存的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下 目录 一、MT改MD二、DLL提供释放接口三、使用进程堆申请内存 在开发主程序和动态库时&#xff0c;首要原则就是&#xff1a;避免跨模块申请和…

即时设计-高效易用的界面工具

界面工具是设计师的得力助手&#xff0c;为设计师快速创建精美易用的用户界面提供了丰富的功能和直观的界面。在众多的界面工具中&#xff0c;有的支持预设模板、图标库和样式库&#xff0c;有的更注重原型和互动。如何选择优秀的界面工具&#xff1f;这里有一个高效易用的界面…

教师辞职后还能再当老师吗

有人提出这样的问题&#xff1a;“我曾是一名教师&#xff0c;但因为种种原因辞职了&#xff0c;现在还想重回教育行业&#xff0c;还有可能吗&#xff1f;”这个问题看似简单&#xff0c;实则涉及了教师职业的几个关键因素。 老师这份工作不仅仅是一份职业&#xff0c;更是一份…