算法leetcode|54. 螺旋矩阵(rust重拳出击)
文章目录
- 54. 螺旋矩阵:
- 样例 1:
- 样例 2:
- 提示:
- 分析:
- 题解:
- rust:
- go:
- c++:
- python:
- java:
- 每次循环移动一步:
- 每次循环完成一个顺时针:
54. 螺旋矩阵:
给你一个 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
分析:
- 面对这道算法题目,二当家的陷入了沉思。
- 可以每次循环移动一步,判断移到边界就变换方向。
- 也可以每次循环都换完4次方向,也就是完成一次顺时针,然后缩圈。
题解:
rust:
impl Solution {pub fn spiral_order(matrix: Vec<Vec<i32>>) -> Vec<i32> {let mut ans = Vec::new();let (rows, columns) = (matrix.len(), matrix[0].len());let (mut left, mut right, mut top, mut bottom) = (0, columns - 1, 0, rows - 1);while left <= right && top <= bottom {(left..right + 1).for_each(|column| {ans.push(matrix[top][column]);});(top + 1..bottom + 1).for_each(|row| {ans.push(matrix[row][right]);});if left < right && top < bottom {(left..right).rev().for_each(|column| {ans.push(matrix[bottom][column]);});(top + 1..bottom).rev().for_each(|row| {ans.push(matrix[row][left]);});}if right == 0 || bottom == 0 {break;}left += 1;right -= 1;top += 1;bottom -= 1;}return ans;}
}
go:
func spiralOrder(matrix [][]int) []int {rows, columns := len(matrix), len(matrix[0])left, right, top, bottom := 0, columns-1, 0, rows-1ans := make([]int, rows*columns)index := 0for left <= right && top <= bottom {for column := left; column <= right; column++ {ans[index] = matrix[top][column]index++}for row := top + 1; row <= bottom; row++ {ans[index] = matrix[row][right]index++}if left < right && top < bottom {for column := right - 1; column >= left; column-- {ans[index] = matrix[bottom][column]index++}for row := bottom - 1; row > top; row-- {ans[index] = matrix[row][left]index++}}left++right--top++bottom--}return ans
}
c++:
class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int rows = matrix.size(), columns = matrix[0].size();int left = 0, right = columns - 1, top = 0, bottom = rows - 1;while (left <= right && top <= bottom) {for (int column = left; column <= right; ++column) {ans.emplace_back(matrix[top][column]);}for (int row = top + 1; row <= bottom; ++row) {ans.emplace_back(matrix[row][right]);}if (left < right && top < bottom) {for (int column = right - 1; column >= left; --column) {ans.emplace_back(matrix[bottom][column]);}for (int row = bottom - 1; row > top; --row) {ans.emplace_back(matrix[row][left]);}}++left;--right;++top;--bottom;}return ans;}
};
python:
class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:ans = list()rows, columns = len(matrix), len(matrix[0])left, right, top, bottom = 0, columns - 1, 0, rows - 1while left <= right and top <= bottom:for column in range(left, right + 1):ans.append(matrix[top][column])for row in range(top + 1, bottom + 1):ans.append(matrix[row][right])if left < right and top < bottom:for column in range(right - 1, left - 1, -1):ans.append(matrix[bottom][column])for row in range(bottom - 1, top, -1):ans.append(matrix[row][left])left, right, top, bottom = left + 1, right - 1, top + 1, bottom - 1return ans
java:
每次循环移动一步:
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> ans = new ArrayList<Integer>();final int rows = matrix.length, columns = matrix[0].length;int left = 0, right = columns - 1, top = 0, bottom = rows - 1;final int total = rows * columns;int row = 0, column = 0;final int[][] moveDirections = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};final int[][] borderDirections = {{1, 0, 0, 0}, {0, 0, 1, 0}, {0, -1, 0, 0}, {0, 0, 0, -1}};int directionIndex = 0;for (int i = 0; i < total; i++) {ans.add(matrix[row][column]);int nextRow = row + moveDirections[directionIndex][0], nextColumn = column + moveDirections[directionIndex][1];if (nextRow < top || nextRow > bottom || nextColumn < left || nextColumn > right) {// 变换方向directionIndex = (directionIndex + 1) % 4;// 修改边界left += borderDirections[directionIndex][0];right += borderDirections[directionIndex][1];top += borderDirections[directionIndex][2];bottom += borderDirections[directionIndex][3];}row += moveDirections[directionIndex][0];column += moveDirections[directionIndex][1];}return ans;}
}
每次循环完成一个顺时针:
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> ans = new ArrayList<Integer>();final int rows = matrix.length, columns = matrix[0].length;int left = 0, right = columns - 1, top = 0, bottom = rows - 1;while (left <= right && top <= bottom) {for (int column = left; column <= right; ++column) {ans.add(matrix[top][column]);}for (int row = top + 1; row <= bottom; ++row) {ans.add(matrix[row][right]);}if (left < right && top < bottom) {for (int column = right - 1; column >= left; --column) {ans.add(matrix[bottom][column]);}for (int row = bottom - 1; row > top; --row) {ans.add(matrix[row][left]);}}++left;--right;++top;--bottom;}return ans;}
}
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
相关文章:

算法leetcode|54. 螺旋矩阵(rust重拳出击)
文章目录 54. 螺旋矩阵:样例 1:样例 2:提示: 分析:题解:rust:go:c:python:java:每次循环移动一步:每次循环完成一个顺时针:…...

单容水箱建模(自衡单容水箱+无自衡单容水箱)
自衡单容水箱Simulink建模和PLC源代码请参看下面文章链接: 单容双容水箱建模(simulink仿真+PLC代码)_RXXW_Dor的博客-CSDN博客PLC通过伯努利方程近似计算水箱流量详细内容请参看下面的文章博客PLC通过伯努利方程近似计算水箱流量(FC)_怎么用伯努利方程求某水位流量_RXXW_Dor的…...

分享Python7个爬虫小案例(附源码)
本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点,非常适合刚入门python爬虫的小伙伴参考学习。注:若涉及到版权或隐私问题,请及时联系我删除即可。 1.使用正则表达式和文件操作爬取并保存“某吧”某帖子…...

我用ChatGPT写2023高考语文作文(一):全国甲卷
2023年 全国甲卷 适用地区:广西、贵州、四川、西藏 人们因技术发展得以更好地掌控时间,但也有人因此成了时间的仆人。 这句话引发了你怎样的联想与思考?请写一篇文章。 要求:选准角度,确定立意,明确文体&am…...
c++ modbusTCP
//Modbus TCP是一种基于TCP/IP协议的Modbus协议,它允许Modbus协议通过以太网进行通信。 //在C中,可以使用第三方库来实现Modbus TCP通信,例如libmodbus和QModbus。 //使用libmodbus库实现Modbus TCP通信的示例代码如下: //c #incl…...

linux(信号结尾)
目录: 1.可重入函数 2.volatile关键字 3.SIGCHLD信号 -------------------------------------------------------------------------------------------------------------------------------- 1.可重入函数----------用来描述一个函数的特点的 1.在单进程当中也存…...

【漏洞修复】node-exporter被检测出来pprof调试信息泄露漏洞
node-exporter被检测出来pprof调试信息泄露漏洞 说在前面解决方法结语 说在前面 惯例开篇吐槽,有些二五仔习惯搞点自研的安全扫描工具,然后加点DIY元素,他也不管扫的准不准,就要给你报个高中危的漏洞,然后就要去修复&…...
在linux 上安装 NFS服务器软件
在 Ubuntu Linux 中创建 NFS 文件系统通常需要完成以下步骤: 安装 NFS 服务器软件。您可以在终端上使用以下命令来安装所需的软件包。sudo apt-get update sudo apt-get install nfs-kernel-server创建要共享的目录。例如,您可以创建一个名为 /var/nfs/shared 的目录。sudo m…...

网卡中的Ring buffer -- 解决 rx_resource_errors 丢包
1、软硬件环境 硬件: 飞腾E2000Q 平台 软件: linux 4.19.246 2、问题现象 网卡在高速收包的过程中,出现 rx error , 细查是 rx_resource_errors 如下: rootE2000-Ubuntu:~# ifconfig eth1 eth1: flags4163<UP,BROADCAST,RU…...
六月九号补题日记:Codeforces Round 877 (Div. 2)
专注是不够的,很重要的一方面在于细节,关注细节:精细和专注才是成功的重点!!! A 题意:给你一堆数字,说这一堆数字是由最初的两个数字相减得到的,让你求出两个数字其中一…...
python基础选择题,高中适用
1. 下面哪个是 Python 的注释符号? A. // B. # C. /* D. ; 答案:B 2. 下面哪个是 Python 的赋值运算符? A. B. C. ! D. > 答案:A 3. 下面哪个是 Python 的逻辑运算符? A. && B. || C. ! D. & 答…...

Linux 面试题-(腾讯,百度,美团,滴滴)
Linux 面试题-(腾讯,百度,美团,滴滴) 分析日志t.log(访问量),将各个ip 地址截取,并统计出现次数,并按从大到小排序(腾讯) http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.20…...
DDD--战略设计步骤
在领域驱动设计(Domain-Driven Design,DDD)中,战略设计是指在系统的整体层面上考虑领域模型的组织和架构。下面是一些战略设计的详细步骤: 确定限界上下文(Bounded Context):首先&a…...

Web Scoket简述
Web Socket 简介 初次接触 Web Socket 的人,我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。 (准确来说HTTP…...
“Docker 技术在企业中的应用及挑战解决方案“
Docker 技术是一种基于容器化的应用部署和管理技术。随着云计算的普及和应用的不断增多,Docker 技术在企业中的应用越来越广泛。本文将介绍 Docker 技术的基本概念、优势和应用场景,并讨论如何在企业中应用 Docker 技术。 一、Docker 技术概述 Docker …...

vue中开发包、生产包、全局包的区别以及安装语法
目录 开发包 (devDependencies) 安装方法 生产包 (dependencies) 安装方法 全局包 (Global build) 安装方法 vue中有三种不同类型的包:开发包 (Development build),生产包 (Production build) 和全局包 (Global build)。下面我们分别解释它们的区别…...

list的模拟实现
前言 list是STL中重要的容器,了解它的原理对于我们掌握它是有很多的帮助的,一般list和vector都是一起来使用的,因为它们的优缺点不同,刚好可以互补。list的优点是任意位置的插入和删除都很快,它的缺点是不支持随机访问…...

ChatGLM简介和SSE聊天接口测试效果
开发公司 智谱AI是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型…...

darknet yolo标注、训练详细说明
文章目录 1、标注数据1.1、标注1.2、生成训练列表文件train.txt1.3、转换数据标注格式 2、训练数据整理2.1、修改train.txt路径2.2、修改yolov3.cfg2.3、obj.name和obj.data2.4、训练脚本文件trian.sh2.5、测试脚本文件test.sh 3、训练 本文对应的脚本文件和程序下载链接 darke…...

chatgpt赋能python:Python如何产生随机整数?
Python如何产生随机整数? Python是一种高级编程语言。它允许程序员轻松地创建各种类型的应用程序,包括生成随机整数。本文将介绍如何在Python中使用内置的随机数函数来生成随机整数。 random模块 Python中的random模块提供了生成随机数的函数。这些函…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...