每日一题(LeetCode)----数组--螺旋矩阵(一)

每日一题(LeetCode)----数组–螺旋矩阵(一)

1.题目(54. 螺旋矩阵)

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

示例 1:

img

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

示例 2:

img

输入: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]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

2.解题思路

思路一

1.我们先根据矩阵的行数和列数(行数/2和列数/2中较小的那个就是循环的次数)确定要从左到右,从上到下,从右到左,从下往上循环几次,

2.然后我们进行遍历,把遍历到的元素放到新创建的vector中,每次遍历一个循环之后,下一次遍历循环的初始位置是当前循环的x坐标+1,y坐标+1(注意刚开始遍历时循环的初始位置是0,0),并且下一次遍历循环的每一条边的长度都要减一

3.填补中间位置

1>如果矩阵的行数和列数有一个小于二,那不用填补中间位置

2>如果矩阵的行数和列数都大于2了,那么看行数和列数谁更小,判断小的那个是不是偶数

如果是,那么结束操作

如果不是且当前列数较大,那么从当前位置向右继续遍历列数-行数+1个元素,并放入到新创建的vector中

如果不是且当前行数较大,那么从当前位置向下继续遍历行数-列数+1个元素,并放入到新创建的vector中

4.返回新创建的vector,操作结束

注意:如果行数等于1或者列数等于1要进行特别判断

​ 如果行数等于1,那么我们从初始位置向右遍历m个元素,并放入到新创建的vector中,然后返回新创建的vector中即可

​ 如果列数等于1,那么我们从初始位置向下遍历m个元素,并放入到新创建的vector中,然后返回新创建的vector中即可

3.写出代码

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m=matrix.size();int n=matrix[0].size();vector<int> res(m*n,0);int dirx=0;int diry=0;int loop=min(m/2,n/2);int offset=1;int count=0;if(n==1){while(m--){res[count]=matrix[count][0];count++;}return res;}if(m==1){while(n--){res[count]=matrix[0][count];count++;}return res;}while(loop--){int i=dirx;int j=diry;//从左到右for(;j<n-offset;j++){res[count++]=matrix[i][j];}//从上到下for(;i<m-offset;i++){res[count++]=matrix[i][j];}//从右到左for(;j>diry;j--){res[count++]=matrix[i][j];}//从下往上for(;i>dirx;i--){res[count++]=matrix[i][j];}dirx++;diry++;offset++;}if(m%2!=0&&n>=m&&m>2&&n>2){int t=n-m+1;while(t--){res[count++]=matrix[dirx][diry];diry++;}}if(n%2!=0&&m>n&&m>2&&n>2){int t=m-n+1;while(t--){res[count++]=matrix[dirx][diry];dirx++;}}return res;}
};

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

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

相关文章

No appropriate protocol -- Mysql

DataGrip连接mysql报以下异常信息&#xff1a; javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…

VsCode连接远程Linux编译环境的便捷处理

1.免输登录密码 免输命令的正确方法是使用公钥和私鈅在研发设备&#xff0c;和linux服务器上校验身份。公钥和私钥可在windows系统上生成。公钥要发送到linux服务器。私钥需要通知给本地的ssh客户端程序&#xff0c;相关的操作如下&#xff1a; 生成 SSH Key&#xff1a; 打开…

安卓中轻量级数据存储方案分析探讨

轻量级数据存储功能通常用于保存应用的一些常用配置信息&#xff0c;并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中&#xff0c;这些文件可以持久化地存储在设备上。需要注意的是&#xff0c;应用访问的实例包含文件所有数据&#xff0c;这些数据会一…

⑩⑦【MySQL】锁:全局锁、表级锁、行级锁

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL锁 ⑩⑦【MySQL】锁&#xff1a;全局锁、…

2023亚太杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

Prometheus+Grafana环境搭建(window)

PrometheusGrafana环境搭建 1&#xff1a;配置Prometheus 1.1: 下载Prometheus安装包 官方下载地址 找到对应的win版本进行下载并解压 1.2 下载Window数据采集 官方下载地址 下载以管理员运行&#xff0c;安装成功后在服务里会出现一个"windows_exporter"采集…

光伏、储能双层优化配置接入配电网研究(附带Matlab代码)

由于能源的日益匮乏&#xff0c;电力需求的不断增长等&#xff0c;配电网中分布式能源渗透率不断提高&#xff0c;且逐渐向主动配电网方向发展。此外&#xff0c;需求响应(demand response&#xff0c;DR)的加入对配电网的规划运行也带来了新的因素。因此&#xff0c;如何综合考…

【LittleXi】CCPC2023 深圳站 总结

【LittleXi】CCPC2023 深圳站 总结 赛前 1、赛前vp了香港&#xff0c;rank13&#xff0c;还行 2、玩了一把div2&#xff0c;上了75分&#xff0c;感觉不如南京之前CF献祭的100分 3、比赛前一晚打了一把abc&#xff0c;只能说消耗了脑力&#xff0c;下次比赛前不玩了 热身赛…

小趴菜教你如何用Python开发手机App..

Python语言虽然很万能&#xff0c;但用它来开发app还是显得有点不对路&#xff0c;因此用Python开发的app应当是作为编码练习、或者自娱自乐所用&#xff0c;加上目前这方面的模块还不是特别成熟&#xff0c;bug比较多&#xff0c;总而言之&#xff0c;劝君莫轻入。 准备工作 …

白银投资的升值空间及未来趋势

在投资多样化的今天&#xff0c;人们可选择的投资产品也越来越多。白银作为具有较高价值的贵金属&#xff0c;一直以来便是仅次于黄金的贵金属投资品种&#xff0c;今年来也受到更多投资者的关注。那么白银的升值空间及未来趋势如何&#xff1f;是否值得投资&#xff1f;这边将…

做医疗影像心脏方面的看过来:医学图像重建的心脏 MRI 数据集

本文发布了CMRxRecon数据集&#xff0c;包括来自 300 名受试者的多对比度、多视图、多切片和多通道 CMR 成像数据&#xff0c;还由经验丰富的放射科医生提供了所有受试者的心肌和心室的手动分割。单位&#xff1a;复旦, 香港理工大学, 厦大等 心脏磁共振成像&#xff08;CMR&a…

神经网络中BN层简介及位置分析

1. 简介 Batch Normalization是深度学习中常用的技巧&#xff0c;Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名&#xff0c;明明是Standardization, 非…

PostgreSQL 入门

文章目录 PostgreSQL介绍PostgreSQL和MySQL的区别PostgreSQL的安装PostgreSQL的配置远程连接配置配置数据库的日志 PostgreSQL基本操作用户操作权限操作 图形化界面安装总结 PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库&#xff0c;底层基于C实现。其开源…

模板初阶学习

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月21日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

前言 随机链表的复制涉及到复制一个链表&#xff0c;该链表不仅包含普通的next指针&#xff0c;还包含random指针&#xff0c;该指针指向链表中的任意节点或空节点。 文章目录 原地修改链表 题目链接&#xff1a; LeetCode 138. 随机链表的复制 原地修改链表 题目介绍&#xf…

拖拽场景遇到 iframe 无法拖拽的问题解决方案

描述一个场景&#xff1a;在网页中&#xff0c;分为上下两部分布局&#xff0c;下半部分显示操作日志&#xff0c;下半部分的区域高度是可拖拽调整的&#xff0c;但是如果下半部分嵌入一个 iframe 的时候&#xff0c;往上拖拽可以&#xff0c;但是往下拖拽&#xff0c;一旦到了…

分类问题的评价指标

一、logistic regression logistic regression也叫做对数几率回归。虽然名字是回归&#xff0c;但是不同于linear regression&#xff0c;logistic regression是一种分类学习方法。 同时在深度神经网络中&#xff0c;有一种线性层的输出也叫做logistic&#xff0c;他是被输入…

以太网_寻址

【架构图】 【ipconfig/all】 MAC地址&#xff1a;作用于本地网络&#xff0c;数据包发送到本地交换机或路由器后经判断目的地址是本地网络地址会转发给当前MAC地址对应的网线端口。 IP地址&#xff1a;供路由器寻址&#xff0c;会跟子网掩码进行运算&#xff0c;属于同一网络…

git问题: git@10.18.*.*: Permission denied (publickey,password)

遇到的问题&#xff1a; openSSH版本太高&#xff0c;openssh高版本默认禁止ssh-rsa加密算法&#xff0c;直接换ed25519 执行以下命令&#xff1a; 在.ssh目录下执行&#xff1a;ssh-keygen -t ed25519 -C “youremail.com” ssh-add ~/.ssh/id_ed25519 将id_ed25519.pub添加…

BigDecimal的常见陷阱

文章目录 BigDecimal概述BigDecimal常见陷阱1.使用BigDecimal的构造函数传入浮点数2.使用equals()方法进行数值比较3.使用不正确的舍入模式 总结&#xff1a; BigDecimal概述 BigDecimal 是 Java 中的一个类&#xff0c;用于精确表示和操作任意精度的十进制数。它提供了高精度的…