刷题第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 += 1starty += 1  # 注意循环完一圈后,startx, starty都要加1哦if n % 2 != 0:  # 当n为奇数时,填充中心点nums[mid][mid] = count  # 因为上面每次赋值完,count都会后加1,所以直接赋值就好了return nums  # 返回排列好的矩阵

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

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

网格划分中将部分网格投影到其它部件上的方法

1、将网格投影到目标面上&#xff1a; 2、将一个部件边界上单元的点映射到另一个部件上

力扣5. 最长回文子串(双指针、动态规划)

Problem: 5. 最长回文子串 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;双指针 1.我们利用双指针从中间向两边扩散来判断是否为回文串&#xff0c;则关键是找到以s[i]为中心的回文串&#xff1b; 2.我们编写一个函数string palindrome(string &s, in…

Python中的os库

一.OS库简介 OS是Operating System的简写&#xff0c;即操作系统。 OS库是一个操作系统接口模块&#xff0c;提供一些方便使用操作系统相关功能的函数。 二.OS库常用函数 2.1文件和目录 2.1.1&#xff1a;os.getcwd() 作用&#xff1a;返回当前工作目录&#xff0c;结果是…

前端常用6种数据加密方式的使用(最详解)

目录 前言 一、6种常用加密方案 1.Base64加密 2.MD5加密&#xff08;不可逆&#xff09; 3.sha256加密 4.sha1加密&#xff08;相比于MD5 安全性高&#xff0c;但是 速度慢&#xff09; 5.AES加密 6.字符串的编码和解码 二、结语 往期回顾 前言 相信大家在工作或面试…

windbg调试.net程序知识快速参考

最近因团队下一个开发工程师的WPF应用存在偶尔卡顿的现象&#xff0c;重新温习了下windbg的知识&#xff0c;此次记录备忘下&#xff0c;以下是整理的思维导图&#xff0c;有点乱&#xff0c;哈哈。 FAQ 运行!address -summary时&#xff0c;提示错误 ntdll.dll not found 查过…

雾锁王国Enshrouded服务器CPU内存配置怎么选择?

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

LightDB24.1 lt_package系统表字段 pkgboby一行长度限制为8160

背景 oracle plsql支持创建package和package boby&#xff0c;且支持的长度超过postgres所限定的8192个字节的长度&#xff08;实际上postgres出去元组头部分所占的空间&#xff0c;长度肯定是小于8192字节的&#xff09;。目前遇到的情况就是oracle环境下包的长度远远大于Li…

打卡今天内存管理

首先我们的体系结构是这样的&#xff0c;根据小林coding 来写的笔记 寄存器&#xff0c;速度非常快&#xff0c; 32位的可以存4个字节&#xff0c;64位的可以存8个字节 多少位只是在32位以上 地址空间 分为两种地址空间 &#xff1a; 物理&#xff0c;逻辑 地址空间 地址空间…

选择排序,冒泡排序,插入排序,快速排序及其优化

目录 1 选择排序 1.1 原理 1.2 具体步骤 1.3 代码实现 1.4 优化 2 冒泡排序 2.1 原理 2.2 具体步骤 2.3 代码实现 2.4 优化 3 插入排序 3.1 原理 3.2 具体步骤 3.3 代码实现 3.4 优化 4. 快速排序 4.1 原理 4.2 具体步骤 4.3 代码实现 4.4 优化 为了讲…

源码和包管理器安装U-Boot tools

源码和包管理器安装U-Boot tools U-Boot&#xff08;Universal Bootloader&#xff09;是一个开源的嵌入式系统引导加载程序&#xff0c;用于引导嵌入式系统&#xff0c;如单板计算机、嵌入式开发板等。U-Boot 提供了一种灵活的引导解决方案&#xff0c;支持多种处理器架构和嵌…

使用pyannote-audio实现声纹分割聚类

使用pyannote-audio实现声纹分割聚类 1 简单介绍 pyannote.audio是用Python编写的用于声纹分割聚类的开源工具包。在PyTorch机器学习基础上&#xff0c;不仅可以借助性能优越的预训练模型和管道实现声纹分割聚类&#xff0c;还可以进一步微调模型。 它的主要功能有以下几个&…

ISP代理是什么?跨境账号养号为什么要选择它?

在跨境出海业务中&#xff0c;代理IP对于您的在线任务至关重要&#xff0c;尤其是对于那些运行多个帐户的人来说。为您的帐户选择正确类型的代理对于确保帐户安全非常重要&#xff0c;劣质的IP容易使账号遭受封号风险。IPFoxy的多种代理IP类型应用范围各有侧重&#xff0c;其中…

【GO开发工程师】grpc进阶#golang

【GO开发工程师】grpc进阶#golang 推荐个人主页&#xff1a;席万里的个人空间 文章目录 【GO开发工程师】grpc进阶#golang1、protobuf2、grpc2.1、gRPC 的 Metadata机制2.2、grpc拦截器 1、protobuf syntax "proto3"; // 指定使用的 protobuf 版本为 proto3 import…

vue-router4 (六) 命名视图

命名视图可以使得同一级&#xff08;同一个组件&#xff09;中展示更多的路由视图&#xff0c;而不是嵌套显示&#xff0c; 命名视图可以让一个组件中具有多个路由渲染出口&#xff0c;这对于一些特定的布局组件非常有用。 应用场景&#xff1a; 比如点击login切换到组件A&am…

Random,随机函数

黑马程序员学习笔记 nextInt(n)&#xff1a; 只生成0~(n-1)之间的数字&#xff0c;不包括n 主要代码就三个; package com.zhang.random;import java.util.Random;public class RandomDemo1 {public static void main(String[] args) {//目标&#xff1a;掌握使用Random生成随…

进制转换md5绕过 [安洵杯 2019]easy_web1

打开题目 在查看url的时候得到了一串类似编码的东西&#xff0c;源码那里也是一堆base64&#xff0c;但是转换成图片就是网页上我们看见的那个表情包 ?imgTXpVek5UTTFNbVUzTURabE5qYz0&cmd 我们可以先试把前面的img那串解码了 解码的时候发现长度不够&#xff0c;那我们…

算法沉淀——动态规划之子序列问题(下)(leetcode真题剖析)

算法沉淀——动态规划之子序列问题 01.最长定差子序列02.最长的斐波那契子序列的长度03.最长等差数列04.等差数列划分 II - 子序列 01.最长定差子序列 题目链接&#xff1a;https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/ 给你一个整数数…

springboot+vue实现oss文件存储

前提oss准备工作 进入阿里云官网&#xff1a;阿里云oss官网 注册 搜OSS&#xff0c;点击“对象存储OSS” 第一次进入需要开通&#xff0c;直接点击立即开通&#xff0c;到右上角AccessKey管理中创建AccessKey&#xff0c;并且记住自己的accessKeyId和accessKeySecret&#…

【数据结构与算法】回溯法解题20240229

【数据结构与算法】回溯法解题20240229 一、46. 全排列1、以[1,2,3]为例&#xff0c;抽象成树形结构2、回溯三部曲 二、LCR 084. 全排列 II1、以[1,1,2]为例&#xff0c;抽象成树形结构 三、面试题 08.07. 无重复字符串的排列组合四、面试题 08.08. 有重复字符串的排列组合 一、…

Java面试资料集合,只需一篇文章吃透Java多线程技术

前言 受到疫情影响我从过完年一直呆在家里&#xff0c;索性学点知识方便以后跳槽涨薪&#xff0c;于是从二月份开始学习阿里P8架构师纯手打的一份Java面经手册&#xff0c;没想到5月初我成功从我们三线的一个小公司跳槽进了腾讯&#xff0c;虽然等级不高&#xff0c;但是涨薪还…