( 数组) 59. 螺旋矩阵 II ——【Leetcode每日一题】

news/2024/4/19 20:42:02/

❓59. 螺旋矩阵 II

难度:中等

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

示例 1:

在这里插入图片描述

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

示例 2:

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

提示:

  • 1 <= n <= 20

💡思路:模拟法

模拟矩阵的生成。按照要求:

  • 初始位置设为矩阵的左上角,初始方向设为向右
  • 若下一步的位置超出矩阵边界,或者是之前访问过的位置,则==顺时针旋转==(右 -> 下 -> 左 -> 上 循环),进入下一个方向。
  • 如此反复直至填入 n 2 n^2 n2

ans所求的矩阵,其初始元素设为 0。由于填入的元素均为正数,我们可以判断当前位置的元素值,若不为 0,则说明已经访问过此位置。

🍁代码:(Java、C++)

Java

class Solution {public int[][] generateMatrix(int n) {int[][] ans = new int[n][n];int row = 0, col = 0;for(int i = 1; i <= n * n;){//先向右,行不变,列+1while(col < n && ans[row][col] == 0 && i <= n * n){ans[row][col++] = i++;}row++;col--;//向下,列不变,行+1while(row < n && ans[row][col] == 0 && i <= n * n){ans[row++][col] = i++;}row--;col--;//向左,行不变,列-1while(col >= 0 && ans[row][col] == 0 && i <= n * n){ans[row][col--] = i++;}row--;col++;//向上,列不变,行-1while(row >= 0 && ans[row][col] == 0 && i <= n * n){ans[row--][col] = i++;}row++;col++;}return ans;}
}

C++

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans(n, vector<int>(n, 0));int row = 0, col = 0;for(int i = 1; i <= n * n;){//先向右,行不变,列+1while(col < n && ans[row][col] == 0 && i <= n * n){ans[row][col++] = i++;}row++;col--;//向下,列不变,行+1while(row < n && ans[row][col] == 0 && i <= n * n){ans[row++][col] = i++;}row--;col--;//向左,行不变,列-1while(col >= 0 && ans[row][col] == 0 && i <= n * n){ans[row][col--] = i++;}row--;col++;//向上,列不变,行-1while(row >= 0 && ans[row][col] == 0 && i <= n * n){ans[row--][col] = i++;}row++;col++;}return ans;}
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),其中 n 是给定的正整数。矩阵的大小是 n×n,需要填入矩阵中的每个元素。
  • 空间复杂度 O ( 1 ) O(1) O(1),除了返回的矩阵以外,空间复杂度是常数。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


http://www.ppmy.cn/news/84932.html

相关文章

Linux 备份要点

文章目录 Linux 备份要点确定备份的目录和文件备份的种类、频率与工具的选择完整备份增量备份差异备份镜像备份 定期备份远程备份的脚本使用rsync上传备份数据 Linux 备份要点 在Linux系统中&#xff0c;备份数据是非常重要的&#xff0c;特别是在生产环境中。以下是Linux备份…

Android 12.0SystemUI 下拉状态栏默认展开下拉框(展开下拉快捷)

1.概述 在12.0定制化开发中,在进行定制SystemUI 下拉状态栏的时候 ,需要默认展开下拉框 显示出所以的下拉快捷图标 就是不需要二次展开下拉状态栏 这就要从NotificationPanelView.java中 下拉事件处理 而在12.0中下拉事件全都有NotificationPanelViewController.java 来处理…

vue-router

watch(() > route.path,(newPath, oldPath) > { if (newPath.includes(“/user”)) { default_open.value ‘0-1’ } else if(newPath.includes(“/role”)) { default_open.value ‘0-2’ }else if(newPath.includes(“/privilege”)) { default_open.value ‘0-3’ …

软件工程学习1:软件项目项目管理

假设你被指派作为一个软件公司的项目负责人&#xff0c;任务是开发一个管理系统&#xff0c;人员规模大约为8人&#xff0c;人员角色应如何确定&#xff1f;应如何进行项目管理&#xff1f;&#xff08;从软件项目管理估算、软件规模、工作量估算、进度计划安排、软件过程模型等…

数字档案馆建设指南

数字档案馆建设指南 目 录 1.总体要求 2.管理系统功能要求 3.应用系统开发和服务平台构建 4.数字档案资源建设 5.保障体系建设 1.总体要求 1.1概述 数字档案馆是指各级各类档案馆为适应信息社会日益增长的对档案信息资源管理、利用需求&#xff0c;运用现代信息技术对数字…

人工智能(Pytorch)搭建模型6-使用Pytorch搭建卷积神经网络ResNet模型

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(Pytorch)搭建模型6-使用Pytorch搭建卷积神经网络ResNet模型&#xff0c;在本文中&#xff0c;我们将学习如何使用PyTorch搭建卷积神经网络ResNet模型&#xff0c;并在生成的假数据上进行训练和测试。本文将…

Ansible自动化部署工具|各个模块的使用

Ansible自动化部署工具|各个模块的使用 一、自动化运维工具—Ansible二、安装Ansible查询webserver组中主机的日期 三 Ansible常用模块(1) ansible命令行模块(2) command模块(3) shell模块(4) cron模块(5) user模块(6) group模块(7) copy模块(8) file模块(9) ping模块(10) serv…

【Midjourney】Midjourney 辅助工具 ② ( 自定义命令工具 | 设置颜色 | 设置材质 | 设置随机种子 | 设置图片链接 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置颜色参数2、设置材质参数3、设置随机种子参数4、设置图片链接 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生成器…

Educational Codeforces Round 148 (Rated for Div. 2) 题解

总结&#xff1a;5.21下午VP一场&#xff0c;死在了A题&#xff0c;给我wa崩溃了&#xff0c;浪费了差不多一个小时&#xff0c;BC还挺顺畅&#xff0c;虽然C题是在结束后不久交上去的。。。。 A. New Palindrome 思路&#xff1a;其实思路很简单&#xff0c;“The string s …

【滴水逆向P77】加载进程(PE查看器)应用程序源码解析

在上一篇文章中讲解了通用控件&#xff0c;做了一个基本的加载进程&#xff08;PE查看器&#xff09;的应用程序项目&#xff0c;Win32通用控件&#xff0c;加载进程&#xff08;PE查看器&#xff09;项目初步&#xff0c;大家如果有不懂的可以去看看&#xff0c;由于不是很了解…

Sui基金正在招聘亚太地区市场经理,期待您的加入

Sui基金会致力于支持Sui网络的开发、增长和推广使用。Sui是基于第一原理重新设计和构建而成的L1公有链&#xff0c;旨在为创作者和开发者能够构建从游戏到金融的独特Web3体验。 Sui基金会三大去中心化原则&#xff1a;拥抱透明且公平的竞争环境、公开沟通以建立信任的文化&…

搭建服务器的主流中间件有哪些?如何在外网访问内网的服务?

计算机业内人士对于搭建服务器的中间件并不陌生&#xff0c;apache、tomcat、IIS、nginx 都是比较常用的搭建服务器的中间件&#xff0c;它们之间还是有一些区别差异的。今天就说说这些中间件之间有哪些区别&#xff0c;以及如何利用快解析实现内网主机应用让外网访问。 首先说…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…

自学网络安全遇到问题怎么解决?路线是什么

自学网络安全很容易学着学着就迷茫了&#xff0c;找到源头问题&#xff0c;解决它就可以了&#xff0c;所以首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题&#xff0c;看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xf…

调优圣经:零基础精通Jmeter分布式压测,10Wqps+超高并发

高并发压测的场景 在40岁老架构师尼恩的读者社群&#xff08;50&#xff09;中&#xff0c;很多小伙伴拿不到offer&#xff0c;或者拿不到好的offer。 尼恩经常给大家 优化项目&#xff0c;优化简历&#xff0c;挖掘技术亮点。 在指导简历的过程中&#xff0c; Java 调优是一…

【C++/嵌入式笔试面试八股】一、23.结构体指针 | 指针和引用 | 万能指针 | 野指针

结构体指针 28.将结构体作为参数向函数中传递 传递方式有两种: 值传递地址传递,利用操作符 -> 可以通过结构体指针访问结构体属性//学生结构体定义 struct student {//成员列表string name; //姓名int age; //年龄int score; //分数 };//值传递

Golang如何在VS Code中配置和调试Gin

学习目标: 了解如何在VS Code中配置Golang的Gin框架学习安装Go扩展和Delve调试器通过一个简单的例子学习如何Gin框架学习内容: 1. Gin 框架的介绍: Gin是一个使用Go语言编写的Web框架。它通过提供一组简单的API来帮助开发人员构建高性能、可扩展的Web应用程序。 以下是Gi…

Linux防火墙----firewalld

文章目录 一、firewalld概述二、firewalld 与 iptables 的区别三、firewalld 区域的概念四、firewalld数据处理流程五、firewalld防火墙的配置方法5.1 使用firewall-config 图形工具5.2 编写/etc/firewalld/中的配置文件5.3使用firewall-cmd 命令行工具 一、firewalld概述 fir…

PyG的Planetoid无法直接下载Cora等数据集的解决方法

问题描述&#xff1a; 在使用PyG的时候&#xff0c;通常会涉及到一些公共数据集的下载&#xff0c;由于网络问题&#xff0c;导致无法下载出现以下问题&#xff1a; 尝试了很多的方法都没有成功&#xff08;主要是个人比较菜&#xff01;&#xff09;。但是皇天不负有心人&am…

Java反射机制深入详解

一.概念 反射就是把Java的各种成分映射成相应的Java类。 Class类的构造方法是private&#xff0c;由JVM创建。 反射是java语言的一个特性&#xff0c;它允程序在运行时&#xff08;注意不是编译的时候&#xff09;来进行自我检查并且对内部的成员进行操作。例如它允许一个ja…