力扣54. 螺旋矩阵

模拟

  • 思路:
    • 转向表示:使用行下标和列下标变化;
      • 比如向上:行下标 - 1, 列下标,即 {-1, 0}
      • 同理向下 {1, 0}
      • {0, 1} 表示向右
      • {0, -1} 表示向左
    • 螺旋方向为:向右、向下、向左、向上,周期变化;
      • 从 4 个转向中周期选取

      • directIdx = (directIdx + 1) % 4;

    • 出现转向是 next 到达“边界”:
      • 真正的边界;
      • 已经访问过的成为了边界;
    • 预测下一个行列下标:
      • int nextRow = r + directions[directIdx][0];

      • int nextColumn = c + directions[directIdx][1];

    • 根据转向规则,更新行列下标:
      • r += directions[directIdx][0];

      • c += directions[directIdx][1];

    • 完整代码:
class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int row = matrix.size();if (row == 0) {return {};}int column = matrix[0].size();if (column == 0) {return {};}std::vector<std::vector<bool>> visited(row, std::vector<bool>(column));int sz = row * column;std::vector<int> order(sz);int r = 0;int c = 0;int directIdx = 0;for (int i = 0; i < sz; ++i) {order[i] = matrix[r][c];visited[r][c] = true;int nextRow = r + directions[directIdx][0];int nextColumn = c + directions[directIdx][1];if (nextRow < 0 || nextRow >= row || nextColumn < 0 || nextColumn >= column ||visited[nextRow][nextColumn]) {directIdx = (directIdx + 1) % 4;}r += directions[directIdx][0];c += directions[directIdx][1];}return order;}private:static constexpr int directions[4][2] = {// right{0, 1},// down{1, 0},// left{0, -1},// up{-1, 0}};
};
  • 空间复杂度是 O(m x n),应该可以将复杂度降低到 O(1)

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

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

相关文章

《微信小程序开发从入门到实战》学习八十三

6.13 视频API 使用视频API可以对用户手机设备中的视频进行一些操作。如果希望播放视频内容&#xff0c;需要使用小程序中的video组件。 6.13.1 保存视频API 使用wx.saveVideoToPhotosAlbum接口可将视频保存到手机相册&#xff0c;支持MP4视频格式。该接口用前需用户授权scop…

RESTfulAPI和webservice 到底有啥区别

RESTful API和Web Service在多个方面存在显著的区别。 首先&#xff0c;从定义上看&#xff0c;Web Service是一个平台独立的、低耦合的、自包含的、基于可编程的web的应用程序&#xff0c;可使用开放的XML&#xff08;标准通用标记语言下的一个子集&#xff09;标准来描述、发…

DOS命令

当使用DOS命令时&#xff0c;可以在命令提示符下输入各种命令以执行不同的任务。以下是一些常见DOS命令的详细说明&#xff1a; dir (Directory): 列出当前目录中的文件和子目录。 用法: dir [drive:][path][filename] [/p] [/w] cd (Change Directory): 更改当前目录。 用法: …

Alist开源网盘搭建

官网&#xff1a;https://alist.nn.ci/zh/github下载地址&#xff1a;https://github.com/alist-org/alist/releases gitcode上也提供了源码:https://gitcode.com/mirrors/alist-org/alist/tags 源码安装使用自己研究,这里不讲解,较为复杂 我使⽤的版本:v3.29.1 我的下载地址:…

websocket项目 聊天室

1.项目概述 这个项目是一个基本的实时聊天应用&#xff0c;适用于小型团队或群体。提供了多个聊天室供用户选择。可以通过该代码进行进一步的扩展和定制&#xff0c;例如添加聊天机器人、改进界面等。 2.技术栈 flask&#xff0c;boostrapt&#xff0c;websocket&#xff0c…

adb调试软件下载 及 常用调试命令

一、软件下载 Windows版本&#xff1a;下载 Mac版本&#xff1a;下载 Linux版本&#xff1a;下载 二、常见调试命令 进入ADB调试 在文件路径栏输入cmd&#xff0c;回车&#xff0c;即可进入adb调试。注意&#xff1a;以下3条不要登录设备 shell &#xff08;一&#xff09;显…

大语言模型下载,huggingface和modelscope加速

huggingface 下载模型 如果服务器翻墙了&#xff0c;不用租机器 如果服务器没翻墙&#xff0c;可以建议使用下面的方式 可以租一台**autodl**不用显卡的机器&#xff0c;一小时只有1毛钱&#xff0c;启动学术加速&#xff0c;然后下载&#xff0c;下载完之后&#xff0c;用scp…

芯片烧写工具

问题描述 最近出了一个机器变砖的问题&#xff0c;一些用户使用的设备&#xff0c;头一天晚上用的好好的&#xff0c;第二天来一上电开机就起不来了。 然后就寄回来&#xff0c;返厂维修。一些是因为部分电子器件坏了&#xff0c;还有一些是文件系统问题&#xff0c;重新升级一…

GIT SourceTree 回滚提交

步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 在终端输入命令&#xff08;位置是项目目录下&#xff09; git push origin feature_mo2.1_r3_zhanx653 -f

深圳三维扫描分析/偏差检测模具型腔三维尺寸及形位偏差测量公司

CASAIM中科广电三维扫描模具型腔深圳案例&#xff1a; 模具型腔的三维扫描分析/偏差检测是一项重要的质量控制过程&#xff0c;旨在确保模具制造过程中的精确度和一致性。 CASAIM中科广电通过使用高精度的三维扫描设备&#xff0c;可以获取模具型腔的实际形状和尺寸数据&…

Python - 深夜数据结构与算法之 LRUCache

目录 一.引言 二.LRU Cache 简介 1.实现特性 2.工作流程 三.LRU Cache 实战 1.HashMap ListNode 2.OrderedDict 四.总结 一.引言 LRU 即 Least Recently Used 意为最近使用&#xff0c;它是一种局部 Cache 的缓存方法&#xff0c;用于存储最近使用的元素&#xff0c;…

Java 实现双链表

文章目录 双链表&#xff08;Doubly Linked List&#xff09;是一种常用的数据结构&#xff0c;它与单链表相似&#xff0c;但每个节点除了包含指向下一个节点的指针外&#xff0c;还包含一个指向前一个节点的指针。 双链表的节点由三部分组成&#xff1a;数据域&#xff08;存…

多线程应用场景

一 讨论多线程应用场景 现在很多高级语言都可以很方便的实现多线程&#xff0c;多线程实现很简单&#xff0c;易使用&#xff0c;反而因对多线程的应用场景不是很理解而乱用。 就从身边的事说起&#xff0c;甲同事提出他的一个接口因查询数据库近接近20多秒&#xff0c;于是马上…

Sentinel 轨道数据及下载

Sentinel卫星轨道文件在处理Sentinel卫星数据时发挥着关键作用。这些轨道文件包含了有关卫星在轨道上的运动、位置、姿态等信息&#xff0c;对于地理校正、成像几何校正以及多时相分析等方面具有重要作用。以下是Sentinel卫星轨道文件的主要作用&#xff1a; 地理校正&#xff…

【机器学习300问】8、为什么要设计代价函数(损失函数)?它有什么用?

一、先介绍一下线性回归模型 &#xff08;1&#xff09;基本概念理解 文字解释&#xff1a;线性回归模型顾名思义&#xff0c;他处理的回归问题&#xff0c;是监督学习的一种。线性回归模型是一种预测模型&#xff0c;其基础是假设目标值和输入值之间存在线性关系。通过一条最…

Mingw32编译opencv库

文章目录 1. 准备工作2. 编译cmake构建程序mingw32-make编译 3. 安装4. 安装完的结果 注意&#xff1a; mingw32-make编译的库和MSVC编译的库不兼容&#xff0c;MSVC和mingw-make生成的动态库使用的是不同的ABI&#xff08;Application Binary Interface&#xff09;&#xff0…

蓝桥杯省赛无忧 编程4 小蓝的漆房

输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3输出 1 2#include <bits/stdc.h> using namespace std; int main() {int t; cin >> t;for (int i 0, n, k; i < t; i) {cin >> n >> k;vector<int> arr(n);unordered_set<int> s;for (int j 0…

计算机导论05-计算机网络

文章目录 计算机网络基础计算机网络概述计算机网络的概念计算机网络的功能计算机网络的组成 计算机网络的发展计算机网络的类型 网络体系结构网络互联模型OSI/RM结构与功能TCP/IP结构模型TCP/IP与OSI/RM的比较 网络地址与分配IP地址构成子网的划分IPv6 传输介质与网络设备网络传…

编写python查询数据库增删改查

下面是一个使用Python进行数据库增删改查的示例&#xff0c;以MySQL数据库为例&#xff1a; import mysql.connector# 连接数据库 conn mysql.connector.connect(host"localhost",user"root",password"password",database"mydatabase&quo…

构建稳健的Web应用:LAMP 实践

LAMP 介绍 LAMP 代表 Linux、Apache、MySQL 和 PHP/Python/Perl&#xff08;这些选项中一种&#xff09;的组合&#xff0c;用于搭建 Web 应用程序的开发和运行环境。 Linux&#xff1a;作为操作系统的基础&#xff0c;提供整个 LAMP 堆栈的基础。Linux 提供稳定、安全的环境&…