Leetcode 59.螺旋矩阵Ⅱ

1.题目

image-20240310213332946

2.思路

image-20240310213621445
(借用代码随想录的图)
1.我们将转一圈看作一个循环(1->2->3->4->5->6->7->8 这是一个循环)
2.在这个循环里,我们要画四条边(上右下左)
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
3.因为画这四条边,有重复元素,我们为了统一处理拐角处元素的规则,规定拐角处都让给新的一条边,就是上图不同颜色的边
4. 这样就有两个循环了(第一个循环表示要绘制多少个四条边,第二个循环里绘制四条边)

3.实施细节

1.在画每一条边的时候,我们首先考虑到的第一个问题是:怎么把数写到对应位置去?
解决:设置一个遍历参数,表示当前的位置
ori_i (表示当前位置的横坐标), ori_j(表示当前位置的列坐标)
res[ori_i][ori_j]= num;

2.接下来会遇到:什么时候该画下一条边?
解决:设置边界参数,按3*3矩阵举例
col_max=2(列最大边界)col_min=0(列最小边界)
row_max=2(行最大边界) row_min=0
拿上行从左到右举例:当遍历参数ori_j <= col_max 时画这条边
其他三条边类推

3 画完这四条边后,就该进入到下一个循环了,该继续画下一个四条边了。这时候我们要设置开始绘制的起点。通过一个start参数来设置每次循环的起点

4 要注意当n=奇数的时候,最后最中间会只留下一个小块,这个时候我们规定这四条边都不绘制中间的小块,我们跳出循环,单独给这个小块赋值!

5 怎样判断绘制结束?
解决:当row_min>= row_max 时结束!
注意这里是大于等于 因为当row_min=row_max的时候表示只剩下中间一个小块了,而根据4.的规定,中间小块我们要跳出循环来单独赋值

4.Java代码实现


class Solution {public int[][] generateMatrix(int n) {int[][] res = new int[n][n];int start = 0; //定义初始点//定义边界int row_max = n - 1;int col_max = n - 1;int row_min = 0;int col_min = 0;int num = 1; //定义要写的数while (row_max > row_min) {int ori_i = start;int ori_j = start;//上侧从左到右for (; ori_j <= col_max - 1; ori_j++) {res[ori_i][ori_j] = num;num++;}//右侧从上到下for (; ori_i <= row_max - 1; ori_i++) {res[ori_i][ori_j] = num;num++;}//下侧从右往左for (; ori_j >= col_min + 1; ori_j--) {res[ori_i][ori_j] = num;num++;}//左侧从下往上for (; ori_i >= row_min + 1; ori_i--) {res[ori_i][ori_j] = num;num++;}//更新边界row_max--;col_max--;row_min++;col_min++;//更新初始点start++;}//如果是奇数,需要给最中间的单独赋值if (n % 2 == 1) {res[start][start] = num;}return res;}
}

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

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

相关文章

Java对接腾讯云直播示例

首先是官网的文档地址 云直播 新手指南 可以发现它这个主要是按流量和功能收费的 价格总览 流量这里还只收下行的费用&#xff0c;就是只收观看消耗的流量费 其它的收费就是一些增值业务费 &#xff08;包括直播转码、直播录制、直播截图、直播审核、智能鉴黄、实时监播、移动直…

04-ESP32S3-GPIO

ESP32S3-IDF GPIO GPIO简介 ESP32S3提供了多达45个物理GPIO管脚&#xff0c;这些管脚不仅可以作为通用的输入输出接口&#xff0c;还可以连接到内部外设信号。通过GPIO交换矩阵、IO MUX和RTC IO MUX&#xff0c;可以灵活地配置外设模块的输入信号来源于任何GPIO管脚&#xff0…

空间复杂度(数据结构)

概念&#xff1a; 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复…

【性能测试】性能测试各知识第1篇:性能测试大纲【附代码文档】

性能测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;性能测试大纲。。。。。。。。。。。。。。 全套笔记资料代码移步&#xff1a; 前往gitee仓库查看 感兴趣的小伙伴可以自取哦&#xff0c;欢迎大家点赞转发~ 性能测试大纲 |序号|阶段|概述| |--…

【MATLAB第100期】基于MATLAB的多种改进拉丁超立方LHS数据抽样方法

【MATLAB第100期】基于MATLAB的多种改进拉丁超立方LHS数据抽样方法 一、LHS种类 1、LHS 使用随机搜索生成拉丁超立方体样本。LHS函数特别适用于非常大的设计&#xff0c;当本机MATLAB函数内存不足时。这可能取决于MATLAB版本和所用机器的配置。当尝试运行“lhsdesign”但未成…

springboot实现国际化

引言 今天在开发过程中&#xff0c;遇到国外客户&#xff0c;要求项目一些返回msg中&#xff0c;不能再有中文&#xff0c;于是便有了国际化需求。 How to do 1.在项目resources下创建i18n文件夹以及messages.properties文件 messages.properties 国际化主文件 phoneErr.ms…

Guiding Large Language Models viaDirectional Stimulus Prompting

1. 通过定向刺激提示指导大语言模型 论文地址&#xff1a;[2302.11520] Guiding Large Language Models via Directional Stimulus Prompting (arxiv.org) 源码地址&#xff1a;GitHub - Leezekun/Directional-Stimulus-Prompting: [NeurIPS 2023] Codebase for the paper: &qu…

C语言——函数指针——函数指针数组 (详解)

函数指针数组 函数指针数组的作用 函数指针数组是一个数组&#xff0c;其中的每个元素都是一个函数指针。函数指针是指向函数的指针变量&#xff0c;可以用来调用相应的函数。函数指针数组的作用是可以根据需要动态地选择并调用不同的函数。 函数指针数组的使用场景有很多&…

站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站

文章目录 概要整体架构流程技术名词解释技术细节ssh-ubuntu服务器docker-映射-链接-通信nginx反代mysql设置数据库新密码 小结我的mysql映射目录我的wordpress映射目录 成果展示 概要 新买了一个云服务器&#xff0c;想搭建一个站库分离的wordpress为主的网站&#xff0c;采用d…

docker容器的数据卷

1配置数据卷 docker run --namen01 -d --restartalways -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx 2Docker应用部署 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:5.6 3创建容器&#xff0c; 设置端口映射、目录映射 d…

每日一题leetcode第2834:找出美丽数组的最小和

目录 一.题目描述 二.思路及优化 三.C代码 一.题目描述 二.思路及优化 首先我们看到这个题&#xff0c;就是根据给出的数组元素个数N&#xff0c;从[1&#xff0c;N]找出N个元素&#xff0c;使得N个元素的和最小&#xff0c;其中随便抽两个数出来&#xff0c;两个数之和不能为…

Vue前端的工作需求

加油&#xff0c;新时代打工人&#xff01; 需求&#xff1a; 实现带树形结构的表格&#xff0c;父数据显示新增下级&#xff0c;和父子都显示编辑。 技术&#xff1a; Vue3 Element Plus <template><div><el-table:data"tableData"style"width…

基于斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)的无人机三维路径规划(MATLAB)

一、无人机路径规划模型介绍 二、算法介绍 斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer ,PKO&#xff09;&#xff0c;是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法&#xff0c;它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵…

Python刘诗诗

写在前面 刘诗诗在电视剧《一念关山》中饰演了女主角任如意&#xff0c;这是一个极具魅力的女性角色&#xff0c;她既是一位有着高超武艺和智慧的女侠士&#xff0c;也曾经是安国朱衣卫前左使&#xff0c;身怀绝技且性格坚韧不屈。剧中&#xff0c;任如意因不满于朱衣卫的暴行…

Spring Boot 中使用 Redis + Aop 进行限流

Spring Boot 中使用 Redis 进行限流&#xff0c;通常你可以采用如下几种方式&#xff1a; 令牌桶算法&#xff08;Token Bucket&#xff09;漏桶算法&#xff08;Leaky Bucket&#xff09;固定窗口计数器&#xff08;Fixed Window Counter&#xff09;滑动日志窗口&#xff08…

突破编程_前端_JS编程实例(目录导航)

1 开发目标 目录导航组件旨在提供一个滚动目录导航功能&#xff0c;使得用户可以方便地通过点击目录条目快速定位到对应的内容标题位置&#xff0c;同时也能够随着滚动条的移动动态显示当前位置在目录中的位置&#xff1a; 2 详细需求 2.1 标题提取与目录生成 组件需要能够自…

CSS 居中对齐 (水平居中 )

水平居中 1.文本居中对齐 内联元素&#xff08;给容器添加样式&#xff09; 限制条件&#xff1a;仅用于内联元素 display:inline 和 display: inline-block; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

计算机视觉——P2PNet基于点估计的人群计数原理与C++模型推理

简介 人群计数是计算机视觉领域的一个核心任务&#xff0c;旨在估算静止图像或视频帧中的行人数量。在过去几十年中&#xff0c;研究人员在这个领域投入了大量的精力&#xff0c;并在提高现有主流基准数据集性能方面取得了显著进展。然而&#xff0c;训练卷积神经网络需要大规…

转移表回调函数实现

回调函数实现 计算器的模拟&#xff08;函数指针数组的使用&#xff09;&#xff08;回调函数&#xff09; 简化 冗余 老的代码的问题就是 冗余 写死 不能完成不同的任务 函数调用的时候只需要知道地址就可以 calc计算器 这里也称之为转移表 #define _CRT_SECURE_NO_WAR…

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…