[经典面试题]蛇形矩阵(螺旋矩阵)

2024-02-19 01:48

本文主要是介绍[经典面试题]蛇形矩阵(螺旋矩阵),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【1.打印蛇形矩阵】

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

【代码】

    /**------------------------------------*   日期:2015-02-05*   作者:SJF0115*   题目: 54.Spiral Matrix*   网址:https://oj.leetcode.com/problems/spiral-matrix/*   结果:AC*   来源:LeetCode*   博客:---------------------------------------**/#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:vector<int> spiralOrder(vector<vector<int> > &matrix) {vector<int> result;if(matrix.empty()){return result;}//ifint row = matrix.size();int col = matrix[0].size();int count = row * col;int index = 1;int beginX = 0,endX = row - 1;int beginY = 0,endY = col - 1;while(index <= count){// rightfor(int i = beginY;i <= endY;++i){result.push_back(matrix[beginX][i]);++index;}//for++beginX;if(beginX > endX){break;}//if// downfor(int i = beginX;i <= endX;++i){result.push_back(matrix[i][endY]);++index;}//for--endY;if(endY < beginY){break;}//if// leftfor(int i = endY;i >= beginY;--i){result.push_back(matrix[endX][i]);++index;}//for--endX;if(endX < beginX){break;}//if// upfor(int i = endX;i >= beginX;--i){result.push_back(matrix[i][beginY]);++index;}++beginY;if(beginX > endY){break;}//if}//whilereturn result;}};int main(){Solution s;vector<vector<int> > matrix = {{1,2,3},{4,5,6},{7,8,9}};vector<int> result = s.spiralOrder(matrix);// 输出for(int i = 0;i < result.size();++i){cout<<result[i]<<"  ";}//forcout<<endl;return 0;}

【2.生成蛇形矩阵】

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]
]
【代码二】

    /**------------------------------------*   日期:2015-02-05*   作者:SJF0115*   题目: 59.Spiral Matrix II*   网址:https://oj.leetcode.com/problems/spiral-matrix-ii/*   结果:AC*   来源:LeetCode*   博客:---------------------------------------**/class Solution {public:vector<vector<int> > generateMatrix(int n) {vector<vector<int> > matrix(n,vector<int>(n,0));if(n <= 0){return matrix;}//ifint count = n * n;int index = 1;int beginX = 0,endX = n - 1;int beginY = 0,endY = n - 1;while(index <= count){// rightfor(int i = beginY;i <= endY;++i){matrix[beginX][i] = index;++index;}//for++beginX;// downfor(int i = beginX;i <= endX;++i){matrix[i][endY] = index;++index;}//for--endY;// leftfor(int i = endY;i >= beginY;--i){matrix[endX][i] = index;++index;}//for--endX;// upfor(int i = endX;i >= beginX;--i){matrix[i][beginY] = index;++index;}++beginY;}//whilereturn matrix;}};

【代码三】

    /**------------------------------------*   日期:2015-02-04*   作者:SJF0115*   题目: 59.Spiral Matrix II*   网址:https://oj.leetcode.com/problems/spiral-matrix-ii/*   结果:AC*   来源:LeetCode*   博客:---------------------------------------**/#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:vector<vector<int> > generateMatrix(int n) {vector<vector<int> > matrix(n,vector<int>(n,0));if(n <= 0){return matrix;}//ifint count = n * n;int index = 1;int x = 0,y = -1;while(index <= count){// right++y;while(y < n && matrix[x][y] == 0){matrix[x][y++] = index;++index;}//while--y;// down++x;while(x < n && matrix[x][y] == 0){matrix[x++][y] = index;++index;}//while--x;// left--y;while(y >= 0 && matrix[x][y] == 0){matrix[x][y--] = index;++index;}//while++y;// up--x;while(x >= 0 && matrix[x][y] == 0){matrix[x--][y] = index;++index;}//while++x;}//whilereturn matrix;}};int main(){Solution s;int n = 5;vector<vector<int> > matrix = s.generateMatrix(n);// 输出for(int i = 0;i < n;++i){for(int j = 0;j < n;++j){cout<<matrix[i][j]<<"  ";}//forcout<<endl;}//forreturn 0;}


这篇关于[经典面试题]蛇形矩阵(螺旋矩阵)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723127

相关文章

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`