【算法与数据结构】59、LeetCode螺旋矩阵2

news2024/11/25 19:29:45

文章目录

  • 题目
  • 一、方向向量法
  • 完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

题目

在这里插入图片描述

一、方向向量法

  思路分析:螺旋矩阵在旋转过程中,我们选择的区间是左闭右开区间[ , ],例如方向为从左往右赋值时,从(0,0)赋值到(0,n-1),然后调转方向,赋值(1,n-1)到(n-1,n-1) 。简单示意图如下:
在这里插入图片描述

  分析矩阵变换的增量delta_x和delta_y,这两个变量以右下左上的顺序变化时,其值依次为:{{0,1},{1,0},{0,-1},{-1,0}}。那么我们发现delta_x = delta_y, delta_y = - delta_x。那么我们再引入一个临时变量用来交换。然后就是程序边界问题,程序当中使用if语句,res下一个

  程序如下

class Solution {
public:
    // 方向向量法
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));  // vector(n, ele)使用两次,就构造处一个嵌套vector矩阵
        int delta_x = 0, delta_y = 1;
        int x = 0, y = 0;
        for (int i = 1; i <= n * n; i++) {
            res[x][y] = i;
            if (res[(x + delta_x + n) % n][(y + delta_y + n) % n] != 0) { // 判断是否转弯,当dy为-1会造成 y+dy < 0,数组越界,加n是为了防止这个问题
                int tmp = delta_y;
                delta_y = -delta_x;
                delta_x = tmp;
            }
            x += delta_x;
            y += delta_y;
        }
        return res;
    }
};

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2),遍历 n 2 n^2 n2遍。
  • 空间复杂度: O ( 1 ) O(1) O(1)

完整代码

# include<iostream>
# include <vector>
using namespace std;

class Solution {
public:
    // 方向向量法
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));  // vector(n, ele)使用两次,就构造处一个嵌套vector矩阵
        int delta_x = 0, delta_y = 1;
        int x = 0, y = 0;
        for (int i = 1; i <= n * n; i++) {
            res[x][y] = i;
            if (res[(x + delta_x + n) % n][(y + delta_y + n) % n] != 0) { // 判断是否转弯,当dy为-1会造成 y+dy < 0,数组越界,加n是为了防止这个问题
                int tmp = delta_y;
                delta_y = -delta_x;
                delta_x = tmp;
            }
            x += delta_x;
            y += delta_y;
        }
        return res;
    }
};

void my_print(vector<vector<int>>nums, int n, string str) {
	cout << str << endl;
	for (vector<vector<int>>::iterator it = nums.begin(); it < nums.end(); it++) {
		for (vector<int>::iterator vit = (*it).begin(); vit < (*it).end(); vit++) {
			cout << *vit << ' ';
		}	
		cout << endl;
	}
	cout << endl;
}

int main()
{
	int n = 3;
	Solution s1;
	vector<vector<int>>matrix = s1.generateMatrix(n);
	my_print(matrix, n, "生成的矩阵:");
	system("pause");
	return 0;
}

end

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

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

相关文章

【玩转Linux操作】Ubuntu创建桌面快捷方式

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 目录 &#x1f34e;进入applications文件夹 &#x1f34e;选择需要添加到…

chatgpt赋能python:Python开发平台软件的重要性

Python开发平台软件的重要性 随着科技的不断进步和软件开发的发展&#xff0c;Python语言逐渐成为最受欢迎和广泛使用的编程语言之一。作为一门高级编程语言&#xff0c;Python具有简单易懂的语法和强大的功能&#xff0c;能够帮助开发者快速构建复杂的应用程序和网站。Python…

初学者应该怎么学git-下

初学者应该怎么学git-下 Git 文件管理 文件四种状态 ● 版本控制就是对文件的版本控制&#xff0c;在Git 管理中&#xff0c;文件被统一管理&#xff0c;有四个状态 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git 库, 不参与版本控制. 通过git add 状态变为Stage…

高性能网络应用框架

技术主题 Netty从本质上讲是一个高性能网络应用框架&#xff0c;之所以说是高性能&#xff0c;依赖于Netty的线程模型。 一网络编程性能的瓶颈 BIO 模型里&#xff0c; read() 操作和 write() 操作都会阻塞当前线程的&#xff0c;如果客户端已经和服务端建立了一个连接&…

【基于IMX6ULL驱动开发学习】01.安装交叉编译环境【附下载地址】

第一步&#xff08;下载工具链&#xff09;&#xff1a; 从官网上下载交叉编译工具链 https://snapshots.linaro.org/gnu-toolchain/ 按照以下步骤选择 可以选择最新的&#xff08;我也忘记我用的哪个版本了&#xff0c;都可以用问题不大&#xff09; 第二步&#xff08;…

chatgpt赋能python:Python库函数:提高开发效率的利器

Python库函数&#xff1a;提高开发效率的利器 Python作为一门高级编程语言&#xff0c;被广泛应用于 Web开发、科学计算、机器学习、数据分析等领域。它的可读性强、语法简单、库函数丰富是其广受欢迎的原因之一。本文将带您了解Python库函数的优势并介绍几个常用的库函数。 …

大型语言模(LLM) 之 提示词工程(三)

今天我学习了DeepLearning.AI的 Prompt Engineering 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。以下是我写的关于该课程的前两篇博客&#xff1a; 大型语言模(LLM)之提示词工程(一) 大型语言模(LLM)之提示词工程(二) 今天我们来学习第三部分内容…

【express模块】课程笔记

目标&#xff1a; express.static()快速托管静态资源express路由精简项目结构常见express中间件使用express创建API接口在express中启用cors跨域资源共享 目录 一. 初识Express 1.1 Express简介 1. 什么是express 2. 进一步理解Express 3. Express能做什么 1.2 Express…

聊聊那些奇葩的代码规范 —— 滥用 lombok

因为有些要求感觉实是太过奇葩&#xff0c;收集下来娱乐下大家。 代码规范要求 在所有无参数构造函数&#xff0c;全参数构造函数&#xff0c;Getter 和 Setter 方法必须要使用 Lombok。 所有的 Builder 方法也必须要用 Lombok。 简单来说是就是 Lombok 没有提供的才可以使用…

《统计学习方法》——逻辑斯谛回归与最大熵模型(上)

引言 逻辑斯谛回归(logistic regression)是统计学习中的经典分类方法。最大熵是概率模型学习的一个准则&#xff0c;将其推广到分类问题得到最大熵模型(maximum entropy model)。 由于后面最优化方法中用到了最优化理论中的一些知识&#xff0c;建议先阅读最优化简介。 逻辑…

chatgpt赋能python:Python开发环境的安装方法

Python开发环境的安装方法 Python已经成为了当今最流行的编程语言之一&#xff0c;它易于学习和使用&#xff0c;而且庞大的社区提供了大量的资源和库。那么&#xff0c;如果你是一位Python初学者或新手&#xff0c;本篇文章将为您介绍如何安装Python开发环境。 Python环境的…

技巧:win10的另一种美化字体的方式,使用noMeiryoUI

目录 1. 前提2. 字体选择3. 查看已经安装的字体并查看效果4. 安装软件修改系统字体5. 修改浏览器字体 1. 前提 21年的时候写了一篇文章&#xff0c;《Windows10下美化字体&#xff0c;达到类似mac的效果》&#xff0c;当时还很迷恋macType这个软件的使用&#xff0c;觉得好牛逼…

DAY11——栈与队列part2

双端队列Deque——Double ended Queue 插入和删除为O(1), 查询为O(n) 使用Deque - 廖雪峰的官方网站 (liaoxuefeng.com) Priority Queue 优先级队列 插入操作 O(1) 取出元素O(logN)——按照元素的优先级取出 底层数据结构为heap&#xff0c;bst... 题目一 最近相关性——使…

《Reinforcement Learning: An Introduction》第3章笔记

Chapter 3 Finite Markov Decision 本章正式介绍有限马尔科夫决策过程(finite Markov decision processes, finite MDP)&#xff0c; 它包括第二章介绍的评估性反馈和关联(associative)—在不同情景下选择不同的状态。 MDP是序贯决策问题的经典形式化表达&#xff0c;它的动作…

【玩转Linux操作】硬链接和软连接

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 欢迎大家访问“在下小吉.”&#xff08;偷偷告诉你这个是我的大号哦&#…

创客匠人5月活动总结

为了帮助老师做好知识变现、拓客增长&#xff0c;让好老师走进千万家&#xff0c;让知识创造价值&#xff0c;五月&#xff0c;创客匠人组织了一系列线上线下干货满满的赋能活动&#xff01; 一、老蒋商业变现营线上 5月10日-5月14日&#xff0c;在线上举办了首期【老蒋商业变现…

C++作业day1

思维导图 有以下定义&#xff0c;说明哪些量可以改变哪些不可以改变&#xff1f; const char *p; p指向的指向不能修改 const (char *) p; char *const p; p不能改 const char* const p; 都不能修改 …

Python对接亚马逊电商平台SP-API的一些概念理解准备

❝ 除了第三方服务商&#xff0c;其实亚马逊卖家本身也可以通过和SP-API的对接&#xff0c;利用程序来自动化亚马逊店铺销售运营管理中很多环节的工作&#xff0c;简单的应用比如可以利用SP-API的对接&#xff0c;实现亚马逊卖家后台各类报表的定期自动下载以及数据分析整理工…

分享两个小众的办公软件

01 Apache OpenOffice是一款开源办公套件软件&#xff0c;主要用于文档处理、电子表格、演示文稿和数据库管理等方面。它包括Writer、Calc、Impress、Draw和Base五个组件。 Writer是Apache OpenOffice的文本编辑器&#xff0c;可用于创建各种类型的文档&#xff0c;如信函、报…

四、文字到语音模型库之Bark

随着人工智能技术的发展,文本到音频(Text-to-Audio,简称 TTA)转换已经成为一个热门的研究领域,旨在通过深度学习模型将任意文本转换为逼真的音频,包括语音、音乐、声效等。近日,一家名为 Suno 的公司在 GitHub 上开源了一个名为 Bark 的 TTA 模型,引起了广泛关注。Bark…