每日一练:螺旋矩阵

news2024/9/20 6:13:11

一、题目要求

给你一个 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]

提示:

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

摘自LeetCode

二、解法1-设定边界 O(M*N)

        当进行螺旋时,矩阵是被一层一层“剥开”的:

        可以发现矩阵每次旋转360°,矩阵就会少最外面那一层,我们可以把这个表现为上下左右的边界都减少1。代码的具体思路如下:

        (1)用4个变量代表矩阵的上下左右边界,并赋初始值;

        (2)进入矩阵开始螺旋,具体过程如下(对照代码查看更清晰):

            ①从左到右:

        ②从上到下:

        ③从右到左:

        ④从下到上:

        需要注意的是当前边界的四个角不要重复添加到 ret 中了。

        (3)经过(2)之后外面层就添加完了,然后缩小边界,去掉外层。

        (4)循环(2)(3)直到全部添加完。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> ret;
        int n = matrix.size() * matrix[0].size();
        int length_left = 0;                     // 左边界
        int length_right = matrix[0].size() - 1; // 右边界
        int width_top = 0;                       // 上边界
        int width_below = matrix.size() - 1;     // 下边界
        while (true) {
            // 从左到右
            for (int i = length_left; i <= length_right; i++) {
                ret.emplace_back(matrix[width_top][i]);
            }
            if (ret.size() == n)
                break;
            // 从上到下
            for (int j = width_top + 1; j <= width_below; j++) {
                ret.emplace_back(matrix[j][length_right]);
            }
            if (ret.size() == n)
                break;
            // 从右到左
            for (int m = length_right - 1; m >= length_left; m--) {
                ret.emplace_back(matrix[width_below][m]);
            }
            if (ret.size() == n)
                break;
            // 从下到上
            for (int n = width_below - 1; n > width_top; n--) {
                ret.emplace_back(matrix[n][length_left]);
            }
            if (ret.size() == n)
                break;
            // 更新左右上下边界
            length_left++;
            length_right--;
            width_top++;
            width_below--;
        }
        return ret;
    }
};

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

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

相关文章

Java | Leetcode Java题解之第396题旋转函数

题目&#xff1a; 题解&#xff1a; class Solution {public int maxRotateFunction(int[] nums) {int f 0, n nums.length, numSum Arrays.stream(nums).sum();for (int i 0; i < n; i) {f i * nums[i];}int res f;for (int i n - 1; i > 0; i--) {f numSum - …

NISP 一级 | 3.1 网络基础知识

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;Internet 和 TCP/IP 协议 因特网&#xff08;Internet&#xff09;通过 TCP/IP 协议将遍布在全世界各地的计算机互联&#xff0c;从而形成超级计算机网络。因特网为用户提供了非…

【50 Pandas+Pyecharts | 暑期档电影票房数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 提取电影名称 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 电影总票房排行3.2 各电影票房占比3.3 2023中国各省地区大学数量分布3.4 《抓…

浅谈产线工控安全,产线工控安全的有效方案

随着工业4.0的发展&#xff0c;产线日益智能化&#xff0c;生产网已经发展成一个组网的计算机环境&#xff0c;虽然都进行了隔离&#xff0c;但仍需和外部进行数据交互&#xff0c;导致有病毒入侵可能。 产线工控安全事件不断 深信达MCK主机加固方案&#xff0c;针对产线工控…

工业无人机性能参数特点!!!

一、基本性能参数 动力系统&#xff1a;工业无人机多采用电动或油动动力系统&#xff0c;以提供足够的推力和续航能力。电动无人机通常具有较低的噪音和振动&#xff0c;适合城市或近距离作业&#xff1b;而油动无人机则具有更长的续航时间和更大的载重能力&#xff0c;适合远…

安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静

针对用户新能源接入后存在安全隐患、缺少有效监控、发电效率无法保证、收益计算困难、运行维护效率低等通点&#xff0c;提出的Acrel-1000DP分布式光伏监控系统平台&#xff0c;对整个用户电站全面监控&#xff0c;为用户实现降低能源使用成本、减轻变压器负载、余电上网&#…

MySQL基础作业三

查询 1.分别查询student表和score表的所有记录 mysql> select *from student; ---------------------------------------------------- | id | name | sex | birth | department | address | ---------------------------------------------------- | 901 | 张三丰…

大模型×认知科学:多维潜空间洞悉复杂认知

最近的一篇来自于Cognitive Sciences的精炼综述带给了我一些对于当下AI的某种反向思考&#x1f914;&#xff0c;分享给大家&#xff1a; 这篇综述讨论了如何通过多种降维技术揭示认知科学中的潜在表征空间&#xff0c;并探讨了选择适合研究目标的嵌入算法时需要考虑的关键因素…

每日一题,力扣leetcode Hot100之206反转链表

原来的链表是1-2-3-4-5-null 反转后是5-4-3-2-1-null 只需要循环遍历&#xff0c;并且借一个temp便可以完成反转 class Solution:def reverseList(self, head: ListNode) -> ListNode:cur, pre head, Nonewhile cur:tmp cur.next # 暂存后继节点 cur.nextcur.next pre…

AndroidStudio清除重置Http Proxy代理的方式

问题背景 在国内做代码开发的都知道&#xff0c;在国际互联网我们存在看不见的墙&#xff0c;导致无法访问一些代码库和资源&#xff0c;所以在使用开发工具拉取第三方库的时候总会遇到无法连接或者连接超时的情况&#xff0c;所以就会使用一些安全的网络代理工具&#xff0c;辅…

[项目][WebServer][项目介绍及知识铺垫][上]详细讲解

目录 1.何为WWW?2.HTTP分层1.整体2.细节3.DNS?4.协议之间是如何协同运作的&#xff1f; 3.Http相关概念1.特点2.URI && URL && URN3.HTTP URL格式 1.何为WWW? WWW是环球信息网的缩写&#xff0c;常简称为Web分为Web客户端和Web服务器程序&#xff0c;WWW可…

基于微信小程序点餐、外卖系统的设计与实现 (源码+lw+参考文档+核心代码讲解等)

基于微信小程序点餐、外卖系统的设计与实现(源码lw部署文档讲解等) 项目概述&#xff1a; 这段时间做了一个关于点餐的小程序&#xff0c;也是学习和总结的一部分&#xff0c;希望对大家有所帮助。本课题的主要目标是设计并能够实现一个基于微信小程序点餐系统。项目采用的是…

视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景

在视频监控系统中&#xff0c;视频画面的稳定性对于确保监控效果至关重要。抖动现象是指视频画面中存在不稳定或频繁晃动的情况&#xff0c;这可能会影响视频的清晰度和可读性。LntonAIServer通过引入抖动检测功能&#xff0c;帮助用户及时发现并解决视频流中的抖动问题&#x…

数据库设计中的需求分析

在数据库设计中&#xff0c;需求分析 是至关重要的一步。它不仅是设计过程的起点&#xff0c;也是后续步骤的基础。如果需求分析出现问题&#xff0c;那么后续所有设计阶段的结果都会受到影响&#xff0c;最终可能导致整个设计返工&#xff0c;耗费大量时间和资源。因此&#x…

不小心从 Android 设备中删除了重要消息,恢复永久删除的消息知识

您是否曾经不小心从 Android 设备中删除了重要消息&#xff0c;并迫切希望能够恢复它们&#xff1f;好吧&#xff0c;好消息是你可以&#xff01;通过一些简单的步骤和正确的工具&#xff0c;您可以恢复那些已删除的消息并找回您认为永远丢失的信息。在本教程中&#xff0c;我将…

redis的 stream数据类型实现 消息队列?

redis的 stream数据类型实现 消息队列&#xff1f; redis的消息队列可以通过&#xff1a; PUB/SUB&#xff0c;订阅/发布模式&#xff1a;缺点是发布订阅模式是无法持久化的&#xff0c;如果出现网络断开、Redis 宕机等&#xff0c;消息就会被丢弃&#xff1b; 使用列表 List…

sklearn-逻辑回归-特征工程示例

sklearn-逻辑回归-特征工程示例 在实际应用场景中&#xff0c;有时候特征的数量会很多&#xff0c;我们出于业务考虑&#xff0c;也出于计算量的考虑&#xff0c;希望对逻辑回归进行特征选择来降维。比如在判断一个人是否会患乳腺癌的时候&#xff0c;医生如果看58个指标来确诊…

【系统方案】大数据库建设技术方案(PPT完整版)

大数据湖建设方案旨在构建一个集中式、可扩展的数据存储与分析平台&#xff0c;集中整合企业内外各类数据资源&#xff0c;形成统一的数据资产池。通过先进的数据处理技术&#xff0c;实现数据的快速入库、高效查询与深度分析&#xff0c;为企业决策提供全面、实时、精准的数据…

关于 win10安装.NET framework 3.5失败 的解决方法

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142030841 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

Stable Diffusion AI算法,实现一键式后期处理与图像修复魔法

在当今数字影像时代&#xff0c;后期处理技术已成为将原始图像转化为视觉上令人惊叹艺术作品的点睛之笔。随着人工智能技术的飞速发展&#xff0c;尤其是Stable Diffusion技术在图像处理领域的应用&#xff0c;图片后期处理已达到前所未有的高度&#xff0c;为摄影师、设计师及…