题目描述:

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

要完成的函数:

vector<int> spiralOrder(vector<vector<int>>& matrix)

说明:

1、这道题给定一个二维的vector,里面存放着m个一维vector,每个一维vector有n列。可以看成是一个矩阵。

要求按照顺时针螺旋顺序,读取矩阵中的数值。

并把读取出来的数值,存放在一个一维的vector中,最后返回这个一维的vector。

2、这道题不难,按照一贯做法,把矩阵分层,外层、内层、再内层……每一层读取四条边上的数值。

代码如下:(附详解)

    vector<int> spiralOrder(vector<vector<int>>& matrix)
{
if(matrix.size()==0)return {};//边界情况,如果matrix中没有元素
int s1=matrix[0].size(),s2=matrix.size(),count=0;//s1代表列数,s2代表行数
vector<int>res(s1*s2,0);//提前申请好空间,节省多次申请空间花费的时间
for(int k=0;k<=(min(s1,s2)-1)/2;k++)//k代表当前处于哪一层
{
for(int i=k;i<s1-k;i++)//读取当前层最上面的边的数值
{
res[count]=matrix[k][i];
count++;
}
for(int i=k+1;i<s2-k;i++)//读取当前层最右边的边的数值
{
res[count]=matrix[i][s1-k-1];
count++;
}
if(s2-1-k!=k)//如果当前层最下面的边跟最上面的边,不是同一条边
{
for(int i=s1-2-k;i>=k;i--)//那么再读取当前层最下面的边的数值
{
res[count]=matrix[s2-1-k][i];
count++;
}
}
if(k!=s1-k-1)//如果当前层最左边的边跟最右边的边,不是同一条边
{
for(int i=s2-2-k;i>=k+1;i--)//那么再读取当前层最左边的边
{
res[count]=matrix[i][k];
count++;
}
}
}
return res;//最后返回一维的vector
}

这道题笔者自己在写代码的时候,在边界条件上出了错误。最开始没有注意到最下面的边可能跟最上面的边,是同一条边的这种情况。

如果没有加以特殊处理,会出现res这个vector的赋值错误,超过了申请的空间。

如果不是先申请空间而是每次不断地插入的话,可能会重复读取,并且顺序上也有问题。

上述代码实测0ms,beats 100.00% of cpp submissions。

leetcode-54-螺旋矩阵的更多相关文章

  1. Java实现 LeetCode 54 螺旋矩阵

    54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  2. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  3. LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵

    题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, ...

  4. LeetCode:螺旋矩阵【54】

    LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...

  5. 【LeetCode】54. 螺旋矩阵

    54. 螺旋矩阵 知识点:数组: 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 输入:matrix = [[1,2,3],[4,5, ...

  6. LeetCode:螺旋矩阵||【59】

    LeetCode:螺旋矩阵||[59] 题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ...

  7. LeetCode之螺旋矩阵

    问题 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ ...

  8. LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)

    题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...

  9. Java实现 LeetCode 59 螺旋矩阵 II

    59. 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ...

  10. leetcode刷题-54螺旋矩阵

    题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...

随机推荐

  1. for 续8

    ---------siwuxie095                 一个问题分析: 在 CMD 窗口输入: dir dir /b dir /b /ah dir C:\Windows dir C:\ ...

  2. 在windows下安装python包管理器pip及使用

      从来没有在Windows下用过pip,今天试了下,原来pip也可以在Windows下安装,使用也和Linux下一样简单. 先从下面的地址下载pip源码: http://pypi.python.or ...

  3. [leetcode]273. Integer to English Words 整数转英文单词

    Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...

  4. centos7之saltstack安装

    查阅来自salt官网:http://docs.saltstack.cn/topics/installation/rhel.html To install using the SaltStack rep ...

  5. 交互原型画得丑?29个优秀UI/UX线框草图

    现在越来越多UI设计师都需要画一些交互的线框图,然而作为视觉专家,当然要把它画得靓靓的嘛,是不是?所以很多用户会使用<5款高效的原型设计工具>来绘制,或者直接手绘更有逼格. 今天达人手工整 ...

  6. 常见的C语言内存错误及对策(转)

    http://see.xidian.edu.cn/cpp/html/483.html 一.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存.浅显的例子就 ...

  7. win7搭建node+npm+bower的环境

    原文的地址:https://my.oschina.net/JeeChou/blog/219699 Windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native ...

  8. live kalilinux能保存文件和设置

    win32diskimager写入kalilinux镜像,建议用parrot sec os gparted /dev/sdb,新建分区sdb3,Lable输入persistence 挂载/dev/sd ...

  9. 看图说说JVM老年代垃圾收集器

    注:G1垃圾收集器是目前最前沿的GC收集器,未来将取代CMS垃圾收集器,可以作为整个Heap的收集器使用,不限于老年代!!!

  10. 获取当前的window 以及设置其rootViewController

    AppDelegate *app = [[UIApplication sharedApplication] delegate];             app.window.rootViewCont ...