题目描述:

给定一个包含 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. 1-求组合数(c(n, m))的几种方法

    1.求C(n, m) 动态规划(递归+记忆数组) 递推关系为:C(n, m) = C(n-1, m) + C(n - 1, m - 1),C(n, m)表示为从n个数中选出m个出来,可以基于最后一个元 ...

  2. 磁盘512n,512e,4k原生磁盘的区别和操作系统支持

    磁盘按照物理扇区大小的不同分为三种512byte原生扇区硬盘(512n),4KB扇区仿真512byte(512E)磁盘,4kB扇区原生磁盘. 首先说物理扇区,扇区是硬盘上最小的读写单位,这个是硬盘决定 ...

  3. Executing a Finite-Length Task in the Background

    [Executing a Finite-Length Task in the Background] Apps that are transitioning to the background can ...

  4. 20169205实验三 敏捷开发与XP实践

    20169205实验三 敏捷开发与XP实践 实验内容及步骤 (一)敏捷开发与XP基本知识 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 一项实践在XP环境 ...

  5. 2、Docker和虚拟机的对比

    2.1 虚拟化技术   虚拟机Virtual Machine与容器化技术(代表Docker)都是虚拟化技术,两者的区别在于虚拟化的程度不同.   Docker为代表的容器化技术并不是虚拟机.   虚拟 ...

  6. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  7. C++ windows下共享内存

    转载:https://blog.csdn.net/tojohnonly/article/details/70246965 共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows ...

  8. ASP.NET Core学习指导

    ASP.NET Core 学习指导 "工欲善其事必先利其器".我们在做事情之前,总应该做好充分的准备,熟悉自己的工具.就像玩游戏有一些最低配置一样,学习一个新的框架,也需要有一些基 ...

  9. Android 色差(尤其白色)的解决办法

    Android 中有时出现色差,我碰到的情况是 Galaxy ACE4 中的白色和系统白色不同,所以显示时候颜色不同,很难看. 我发现的问题是 Color.white, android.R.color ...

  10. Android 载入 HTML

    Android 中载入 HTML 有两种方式: 1. 用 TextView.setText(Html.fromHtml("<html></html>")); ...