leetcode-54-螺旋矩阵
题目描述:
示例 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-螺旋矩阵的更多相关文章
- Java实现 LeetCode 54 螺旋矩阵
54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...
- leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II
54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵
题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, ...
- LeetCode:螺旋矩阵【54】
LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...
- 【LeetCode】54. 螺旋矩阵
54. 螺旋矩阵 知识点:数组: 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 输入:matrix = [[1,2,3],[4,5, ...
- LeetCode:螺旋矩阵||【59】
LeetCode:螺旋矩阵||[59] 题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ...
- LeetCode之螺旋矩阵
问题 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ ...
- LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...
- Java实现 LeetCode 59 螺旋矩阵 II
59. 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ...
- leetcode刷题-54螺旋矩阵
题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...
随机推荐
- Gcc And MakeFile Level1
简单介绍gcc And make 的使用 基本编译 gcc a.c b.c -o exeName 分步编译 gcc -c a.c -o a.o gcc a.o b.c -o main.o 使用Make ...
- Openssl dgst命令
一.简介 消息摘要可以对任意长度的消息产生固定长度(16或20个字节)的信息摘要,理论基于单向HASH函数,根据消息摘要无法恢复出原文,所以是安全的:消息原文和消息摘要是一一对应的,所以又被称作指纹. ...
- loadrunner12-用Chrome如何录制脚本
1.下载Chrome最新版本: 2.打开需要录制的网页,按下F12按钮: 3.在弹出框中,选择Network标签,在该标签下单击红色按钮(开始录制按钮): 4.按下F5刷新页面(不管是否需要录制当前页 ...
- 中介者模式c#(媒婆版)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 中介者模式{ ...
- Mybatis的map用法
当Mybatis传过来的值是map类型的时候,有两种处理方法 1.将数值装入类封装起来 public interface IStudentDao { // 根据姓名和年龄查询 List<Stud ...
- parseInt(string, radix)
参数 描述 string 必需.要被解析的字符串. radix 可选.表示要解析的数字的基数.该值介于 2 ~ 36 之间. 如果省略该参数或其值为 0,则数字将以 10 为基础来解析.如果它以 “0 ...
- windows7 不能更新,提示:"WindowsUpdate_80240016" "WindowsUpdate_dt000",如何解决?
计算机(右键) ---- 管理 -------- 服务和应用程序 -----服务(找到名称为windows update的服务,并且在windwos update服务右键 选择重新启动 ) 再次安装更 ...
- 团体程序设计天梯赛L2-001 紧急救援 2017-03-22 17:25 93人阅读 评论(0) 收藏
L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...
- CodeForces - 669D——(思维题)
Little Artem is fond of dancing. Most of all dances Artem likes rueda — Cuban dance that is danced b ...
- 企业搜索引擎开发之连接器connector(十九)
连接器是基于http协议通过推模式(push)向数据接收服务端推送数据,即xmlfeed格式数据(xml格式),其发送数据接口命名为Pusher Pusher接口定义了与发送数据相关的方法 publi ...