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

news2024/12/25 22:12:01

❓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;){
            //先向右,行不变,列+1
            while(col < n && ans[row][col] == 0 && i <= n * n){
                ans[row][col++] = i++;
            }
            row++;
            col--;
            //向下,列不变,行+1
            while(row < n && ans[row][col] == 0 && i <= n * n){
                ans[row++][col] = i++;
            }
            row--;
            col--;
            //向左,行不变,列-1
            while(col >= 0 && ans[row][col] == 0 && i <= n * n){
                ans[row][col--] = i++;
            }
            row--;
            col++;
            //向上,列不变,行-1
            while(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;){
            //先向右,行不变,列+1
            while(col < n && ans[row][col] == 0 && i <= n * n){
                ans[row][col++] = i++;
            }
            row++;
            col--;
            //向下,列不变,行+1
            while(row < n && ans[row][col] == 0 && i <= n * n){
                ans[row++][col] = i++;
            }
            row--;
            col--;
            //向左,行不变,列-1
            while(col >= 0 && ans[row][col] == 0 && i <= n * n){
                ans[row][col--] = i++;
            }
            row--;
            col++;
            //向上,列不变,行-1
            while(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.coloradmin.cn/o/568255.html

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

相关文章

如何动态显示物品提示?

UE5 插件开发指南 前言0 提示信息窗口类前言 为了使物品的排列简洁,各种游戏里的物品信息都是以提示的形式展示出来,而不是整个铺排陈列,只需要玩家鼠标悬停在物品上就自动显示出提示窗口,如下图所示: 这些提示信息在物品定义数据资产中已经定义了,所以这里要做的只是将…

大数据赋能商业地产研策

商业地产是城市经济的重要支柱&#xff0c;也是城市形象的重要名片。在消费者需求日益多元和个性化的背景下&#xff0c;商业地产面临着激烈的市场竞争和运营效率的挑战。如何在复杂多变的市场环境中&#xff0c;做出科学合理的投资决策和运营策略&#xff0c;是商业地产企业的…

Emacs之高效切换窗口(九十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

软件测试:功能测试----测试范围和测试策略

一、前言 什么是软件测试&#xff1f;测试能够给我们带来什么&#xff1f;对于企业有什么好处&#xff1f; 软件测试&#xff0c;说的直白就是找bug&#xff0c;而针对的就是我们使用的一些app&#xff0c;网页&#xff0c;系统等等。与之而来的还有硬件测试&#xff0c;这里…

【自动化测试】Java+Selenium自动化测试环境搭建

本主要介绍以Java为基础&#xff0c;搭建Selenium自动化测试环境&#xff0c;并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分&#xff0c;selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化&#xff08;OOPP&#xff09…

微软 Build 2023:人工智能重新定义软件开发与工作的未来

2023年5月23日&#xff0c;美国华盛顿州西雅图 —— 微软年度开发者大会Build 2023在西雅图开幕&#xff0c;面对当今由AI引领的技术趋势&#xff0c;微软向超过20万名注册参会的开发者集中展示人工智能如何给软件开发的对象、过程和工具带来巨大变革&#xff0c;并重新定义工作…

MVC框架实现用户登录注册功能(连接数据库)

目录 一、简单理解MVC框架 二、项目结构 三、项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletControllRegister 3.6 web.xml 3.7 login.jsp 3.8 register.jsp 3.9 success.jsp 3.10 failure.jsp 四、实现效果 总结 前言 本篇文…

vue 3 第二十六章:样式(scoped及样式穿透)

文章目录 1. 介绍2. 基本使用3. scoped原理4. 穿透选择器修改全局样式 1. 介绍 在 Vue 中&#xff0c;我们可以使用 scoped 特性来给组件的样式添加作用域。通过为组件的 <style> 标签添加 scoped 特性&#xff0c;我们可以确保组件的样式仅应用于该组件的模板中&#x…

第56章:socket介绍

socket允许位于同一主机&#xff08;计算机&#xff09;或使用网络连接起来的不同主机上的应用程序之间交换数据 概述 在一个典型的客户端/服务器场景中&#xff0c;应用程序使用socket 进行通信的方式如下&#xff1a; 各个应用程序创建一个socket。socket 是一个允许通信的…

项目压测相关

几个重要指标的关系 QPS 并发数/平均响应时间 并发数 QPS*平均响应时间 也就是说&#xff0c;并发连接数代表服务器抗压能力&#xff0c;接收连接的能力。qps代表在相同的并发数下&#xff0c;服务器处理的速度&#xff0c;响应时间越短&#xff0c;那么qps就越大。 不是说并发…

Unity Lightmapping Setting

如下图&#xff1a; Lightmapper: 使用什么硬件或算法渲染 Progressive CPU、Progressive GPU、Enlighten(新的算放目前用的比较少) 此数值会被用于分别乘以Direct Samples&#xff0c;Indirect Samples和Environment Samples这三个数值。这三个数值会被应用于…

【Netty】Netty 如何实现零拷贝(八)

文章目录 前言一、Java 实现零拷贝1.1 Java提供 mmap/write 方式1.2 Java 提供 sendfile 方式 二、Netty 实现零拷贝2.1 CompositeByteBuf 方式2.1 wrap 方式2.3 slice 方式2.4 FileRegion 方式 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff0…

李沐多模态串讲笔记

李沐多模态串讲笔记 0.来源1.回顾1.1 ViLT回顾1.2 Clip回顾1.3回顾小结 2.ALBEF2.1摘要2.2主体方法部分2.2.1模型设计2.2.2目标函数2.2.3momentum distillation 动量蒸馏 2.3下游任务和实验结果 3.VLMo3.1论文贡献3.2研究动机3.3主体方法部分3.3.1模型设计3.3.2分阶段的训练策略…

Android 12 通知样式整理

目录 0. &#x1f4c2; 前言 1. &#x1f531; 通知样式总览 2. ⚛️ 通知样式详解 2.1 Simple Notifiaction 2.2 Action Notifiaction 2.3 Remote Input Notifiaction 2.4 Big Picture Notifiaction 2.5 Big Text Notifiaction 2.6 Inbox Notifiaction 2.7 Media No…

Cobalt Strike工具基本使用

Cobalt Strike 安装启动启动server端启动client目标机器连接 工具基使用用户驱动攻击屏幕截图进程列表键盘记录文件管理远程vnc远程代理端口扫描 生成后门被攻击者运行后门文件后查看结果 钓鱼攻击信息收集网站克隆文件下载 安装 网盘地址&#xff1a;链接&#xff1a;https:/…

AntDB-S流式数据库体验

本文作者&#xff1a;彭冲老师&#xff0c;上一篇彭老师体验了亚信刚发布的社区版AntDB-T数据库&#xff0c;文章如下&#xff1a; AntDB-T交易型数据库体验 本文继续体验AntDB-S流式数据库的&#xff0c;AntDB-S目前还未开放社区版&#xff0c;可以联系AntDB小助手进行体验。…

电压放大器的主要指标有哪些方面

电压放大器是电子电路中常用的器件&#xff0c;在选择和评估电压放大器时&#xff0c;需要考虑以下几个主要指标&#xff1a; 输入电阻&#xff08;Input Resistor&#xff09;&#xff1a;输入电阻是指放大器输入端的电阻值&#xff0c;它反映了放大器将输入信号转换成输出信号…

亚马逊,速卖通,国际站卖家在做测评时如何将风险降到最低呢?

测评是亚马逊卖家提升产品可信度和销售表现的重要手段 现在的测评市场遭到卖家们的极力吐槽&#xff0c;想要找到靠谱的资源也越来越难。据了解&#xff0c;去年很多骗子&#xff0c;中介都涌进测评市场&#xff0c;随意报价&#xff0c;导致整个市场鱼龙混杂&#xff0c;卖家…

MyBatis源码学习四之二级缓存

MyBatis源码学习四之二级缓存 MyBatis的缓存使用的也比较多&#xff0c;而缓存的都实现了一个父类的接口Cache。 一、加载缓存类PerputualCache public static void main(String[] args) {InputStream inputStream null;try {inputStream Resources.getResourceAsStream(&q…