问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3672 访问。

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

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

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

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

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


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

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

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

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

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


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3672 访问。

public class Program {public static void Main(string[] args) {var matrix = new int[,] {{ 1, 2, 3, 4, 5 },{ 6, 7, 8 ,9, 10 },{ 11, 12, 13, 14, 15 },{ 16, 17, 18, 19, 20 },{ 21, 22, 23, 24, 25 }};var res = SpiralOrder(matrix);ShowArray(res);Console.ReadKey();}private static void ShowArray(IList<int> list) {foreach(var num in list) {Console.Write($"{num} ");}Console.WriteLine();}public static IList<int> SpiralOrder(int[,] matrix) {var list = new List<int>();var m = matrix.GetLength(0);var n = matrix.GetLength(1);var max = (int)Math.Ceiling(Math.Min(m, n) / 2d);Spiral(matrix, 0, m, n, max, ref list);return list;}private static void Spiral(int[,] matrix,int level,int m,int n,int max,ref List<int> list) {if(level >= max) return;//顶端for(var j = level; j < n - level; j++) {list.Add(matrix[level, j]);}//右端for(var i = level + 1; i < m - level - 1; i++) {list.Add(matrix[i, n - level - 1]);}//底端if(level != m - level - 1) {for(var j = n - level - 1; j >= level; j--) {list.Add(matrix[m - level - 1, j]);}}//左端if(level != n - level - 1) {for(var i = m - level - 2; i >= level + 1; i--) {list.Add(matrix[i, level]);}}Spiral(matrix, ++level, m, n, max, ref list);}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3672 访问。

1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13

分析:

显而易见, 以上算法的时间复杂度为: 

C#LeetCode刷题之#54-螺旋矩阵(Spiral Matrix)相关推荐

  1. C#LeetCode刷题之#59-螺旋矩阵 II(Spiral Matrix II)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3678 访问. 给定一个正整数 n,生成一 ...

  2. LeetCode 螺旋矩阵(Spiral Matrix)

    思路:做四个方向的遍历右,下,左,上.重复循环这四个方向即得到螺旋矩阵. 注意问题: 1.边界 2.判断当前位置是否已经遍历(mark标志位) 3.vector为空或者只有一个元素 4.循环退出条件 ...

  3. C#LeetCode刷题之#867-转置矩阵(Transpose Matrix)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3756 访问. 给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的 ...

  4. C#LeetCode刷题之#566-重塑矩阵( Reshape the Matrix)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3720 访问. 在MATLAB中,有一个非常有用的函数 resha ...

  5. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  6. ​LeetCode刷题实战584:寻找用户推荐人

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战577:员工奖金

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战81:搜索旋转排序数组 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战568:最大休假天数

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. 【Qt】Qt程序查看动态链接库(windows)
  2. leetcode 151. 翻转字符串里的单词 c代码 三种方案
  3. html 一行显示边框线,HTML 网页中要显示出来一个虚线的边框 就是一行字在边框里面,那个边框是显示出来的,程式码应该怎么写?...
  4. 【Flask】项目中使用请求钩子的妙处有那些?
  5. springmvc在启动工程的时候就访问数据库,加载一些共同的数据
  6. 35岁程序员惨遭裁员,找了6份兼职,晒出收入网友:“打工皇帝”
  7. 蓝桥杯 ALGO-46 算法训练 Hanoi问题
  8. Maven中的pom.properties文件
  9. 百练(十三~十六)题解
  10. windows下安装TensorFlow(Win8 + Anaconda4.4 python3.6)
  11. XILINX FPGA数字信号处理——11、通信信号处理原理及实现
  12. python编写代码自动运行程序_利用Python编写自动打开指定软件的程序
  13. python处理excel数据计算_Python处理Excel数据
  14. WEB服务器有哪几种
  15. 你还在用乞丐版的深拷贝么
  16. 服务器两个内存为何只显示4g_win10系统插入2个4G内存条却只显示4G的解决方法
  17. vscode输出不滚动_解决 使用VSCode环境进行开发,突然出现卡顿、打字显示缓慢,滚动、选择迟缓等问题...
  18. 爬虫(04)cookie+session+正则+字典快速生成2020-12-18
  19. java获取长度_获取java长度
  20. JavaSE2(Java基础)

热门文章

  1. Linux(debian7)操作基础(十四)之文本搜索命令grep使用方法
  2. 华为机试——字符个数统计
  3. 解决QT5中文显示出现乱码
  4. Kubernetes—配置管理ConfigMap(十三)
  5. 【C++基础学习】关于C++静态数据成员
  6. 0407 背景相关的作业
  7. log4j的使用 20210719091111861
  8. 小动画制作 图片盒子配合定时器 winform 114869633
  9. 综合演练 对象数组 对象的方法 我们9203班 0912
  10. 清除默认的内边距与外边距