【leetcode题解C++】54.螺旋矩阵I and 59.螺旋矩阵II

54.螺旋矩阵I

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

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

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路:思路可以参考下面一题的思路(也可以直接看代码),因为作者是先做的59题,再来做的54题。这道题无非比59题多出了跳出循环的判定条件。

代码实现:

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;if(matrix.empty()) return ans;int top = 0;int right = matrix[0].size() - 1;int bottom = matrix.size() - 1;int left = 0;while(1) {for(int i = left; i <= right; ++i) ans.push_back(matrix[top][i]);if(++top > bottom) break;for(int j = top; j <= bottom; ++j) ans.push_back(matrix[j][right]);if(--right < left) break;for(int k = right; k >= left; --k) ans.push_back(matrix[bottom][k]);if(--bottom < top) break;for(int m = bottom; m >= top; --m) ans.push_back(matrix[m][left]);if(++left > right) break;}return ans;}
};

59.螺旋矩阵II

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

示例 1:

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

示例 2:

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

思路:一开始就感觉此题并不涉及什么算法,也没有想到相关的什么算法,于是尝试使用最直接的思路来解题,但是如此的话,就很需要注意边界的问题。如示例1中的图片所示,在往一行或一列添加完数字后需要“转弯”,需要注意的是,每一次转弯后开始填数字的位置。在下面的题解中,把包裹需要填写的行/列的两行/列作为了边界条件(比如:要填写最上面的行,左边的列和右边的列就分别成为了起始和结束的边界...),看上去代码会比leetcode官方题解简洁不少。

代码实现:

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans(n, vector<int>(n, -1));int num = 1;int top = 0;int right = n - 1;int bottom = n - 1;int left = 0;while(num <= n*n) {for(int i = left; i <= right; ++i) ans[top][i] = num++;//上行++top;for(int j = top; j <= bottom; ++j) ans[j][right] = num++;//右列--right;for(int k = right; k >= left; --k) ans[bottom][k] = num++;//下行--bottom;for(int m = bottom; m >= top; --m) ans[m][left] = num++;//左列++left;}return ans;}
};

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

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

相关文章

C# 实现单线程异步互斥锁

文章目录 前言一、异步互斥锁的作用是什么&#xff1f;示例一、创建和销毁 二、如何实现&#xff1f;1、标识&#xff08;1&#xff09;标识是否锁住&#xff08;2&#xff09;加锁&#xff08;3&#xff09;解锁 2、异步通知&#xff08;1&#xff09;创建对象&#xff08;2&a…

技术分享:PHP读取TXT文本内容的五种实用方法

在Web开发中&#xff0c;我们经常需要读取和处理文本文件。PHP作为一种流行的服务器端脚本语言&#xff0c;提供了多种方法来读取TXT文本内容。本文将介绍五种不同的PHP教程&#xff0c;帮助您学习如何使用PHP读取TXT文本内容。PHP读取文件内容在实际开发当中&#xff0c;还是比…

Python单元测试之pytest的使用

一、前提准备 1、前提&#xff1a;需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 安装插件&#xff1a;pip install 插件名 2、命名规范 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开…

Spring(19) ThreadPoolTaskExecutor 线程池的使用

目录 一、线程池简介1.1 为什么使用线程池1.2 线程池为什么需要使用队列1.3 线程池为什么要使用阻塞队列而不是用非阻塞队列1.4 如何配置线程池1.5 execute() 和 submit() 方法 二、ThreadPoolTaskExecutor 线程池简介2.1 简介2.2 核心参数配置2.3 ThreadPoolTaskExecutor 内部…

数据库作业三

1.创建student和score表 2.为student表和score表增加记录 3.查询student表的所有记录 4.查询student表的第2条到4条记录 5.从student表查询所有学生的学号&#xff08;id&#xff09;、姓名&#xff08;name&#xff09;和院系&#xff08;department&#xff09;的信息 6.从st…

Pandas实战100例 | 案例 58: 创建数据透视表

案例 58: 创建数据透视表 知识点讲解 数据透视表是一种常用的数据汇总工具,它允许你在多个维度上重塑和汇总数据。Pandas 提供了 pivot_table 方法来创建数据透视表。 创建数据透视表: 使用 pivot_table 方法,你可以指定值、索引、列和聚合函数来创建数据透视表。这使得数据…

React导航守卫(V5路由)

下载&#xff1a; npm i react-router-dom5 当我们进行路由跳转的时候&#xff0c;有时候需要满足某种条件才能跳转&#xff0c;比如我只有我们登录成功之后才能到首页面&#xff0c;否则就不能到首页面&#xff0c;这时候我们就需要对路由进行拦截。 例如&#xff1a; (1)…

flutter3使用dio库发送FormData数据格式时候的坑,和get库冲突解决办法

问题描述 问题1&#xff1a;当你使用FormData.from(Flutter3直接不能用)的时候&#xff0c;可能会提示没有这个方法&#xff0c;或者使用FormData.fromMap(flutter3的dio支持)的时候也提示没有&#xff0c;这时候可能就是和get库里面的Formdata冲突了 问题1&#xff1a;The me…

C //练习 8-2 用字段代替显式的按位操作,重写fopen和_fillbuf函数。比较相应代码的长度和执行速度。

C程序设计语言 &#xff08;第二版&#xff09; 练习 8-2 练习 8-2 用字段代替显式的按位操作&#xff0c;重写fopen和_fillbuf函数。比较相应代码的长度和执行速度。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可能需要变更。 …

easydarwin 下面easywasmplayer和easyplayer

拷贝大佬们&#xff0c;起码验证能用再写文章&#xff0c;找到的各种坑 easydarwin/easywasmplayer - npm 区别 easyplayer&#xff1a;在与vue2结合的时候没有问题&#xff0c;但是用在vue3中&#xff0c;就是提示各种缺东西&#xff0c;你就是将所有文件引入到index.html都…

github clone Failed to connect to github.com port 443 after xxx ms

最近克隆github项目时老是报超时&#xff0c;可以尝试以下解决方法 如果本地开启了代理还是clone超时&#xff0c;可以尝试最后一种方式解决 1、把 https 换成 http&#xff0c;如&#xff1a; git clone http:xxx2、更新本地hosts配置&#xff0c;可以参考这篇文章获取最新的…

vue基于spring boot框架的发艺美发店理发店管理系统的设计q9xpe

店铺信息、美发信息是发艺美发店管理系统的重要组成部分&#xff0c;信息清晰、详细、准确&#xff0c;能够有效地促进发艺美发店管理系统的运行[5]。基础设定函数是对整个系统的总体布局进行合理安排&#xff0c;包括&#xff1a;店铺活动、物品信息、领用信息等。通过对各类资…

【C++】vector模拟实现过程中值得注意的点

Hello大家好&#xff01;我是咕噜的铁蛋&#xff01;C中的vector是一种动态数组&#xff0c;它能够根据需要自动增长和缩小。虽然C标准库已经为我们提供了vector的实现&#xff0c;但在某些情况下&#xff0c;我们可能需要自己模拟实现一个类似于vector的数据结构。今天铁蛋将给…

CPU密集型计算、IO密集型计算、多进程、多线程

参考链接&#xff1a; 使用多进程multiprocessing模块加速程序的运行_哔哩哔哩_bilibili 什么是CPU密集型计算、IO密集型计算&#xff1a; CPU密集型&#xff1a; CPU密集型也叫计算密集型&#xff0c;是指I/O在很短的时间就可以完成&#xff0c;CPU需要大量的计算和处理&a…

javaweb学习day01(HTML)

一、B/S 软件开发架构简述 1 Java Web 技术体系图 2 B/S 软件开发架构简述 B/S架构 前端 后端 数据库 二、HTML 1 官方文档 地址: https://www.w3school.com.cn/html/index.asp 离线文档: W3School 离线手册(2017.03.11 版).chm 2 网页 3 HTML 介绍 3.1 HTML 是什么…

oop面向对象编程python

1.定义一个圆类&#xff08;Circle&#xff09;,求圆的面积和周长 import mathclass Circle():def __init__(self, R ,name):self.radius Rself.name namedef girth(self):return 2 * self.radius * math.pidef area(self):return self.radius ** 2 * math.pic1 Circle(10,&q…

python 常用功能积累

sql查询 import pymysql import pandas as pduser #用户名 password #密码 dbName #库名 dbHost #ip dbPort 8888 con pymysql.connect(hostdbHost,portdbPort,useruser,passwordpassword,databasedbName,charsetutf8) cursor con.cursor() head ["Id"…

React16源码: React中调度之requestWork的源码实现

requestWork 1 &#xff09;概述 在 scheduleWork 中&#xff0c;找到了创建更新的fiber对应的root节点然后对它进行了一些操作之后&#xff0c;调用了 requestWork&#xff0c;开始请求工作在 requestWork 里面它会做哪些东西呢&#xff1f; 首先我们要把这个root节点加入到调…

Qt所有容器之间的区别,以及如何简单使用?

Qt中常用的容器有 QList、QVector、QMap、QHash、QSet 等,它们都具有不同的特性和适用场景。 1. QList:动态数组,可以动态增加和删除元素,支持随机访问和迭代,适用于不需要频繁插入或删除元素的场景。 ```cpp QList<int> list; list.append(1); list.append(2); fo…

Docker之nacos集群部署

前言 Nacos 是一个开源的注册中心和配置中心&#xff0c;用于实现微服务架构中的服务发现、服务治理和动态配置管理。在 Docker 中使用 Nacos&#xff0c;你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署 一.Nacos镜像拉取及独立模式 镜像拉取命令详解&…