题目英文

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

Example 1:

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

Example 2:

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]

题目中文

给定一个包含 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]

示例 3:

输入:
[[1]
]
输出: [1]

示例 4:

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

算法实现

public class Solution
{public IList<int> SpiralOrder(int[][] matrix){IList<int> result = new List<int>();if (matrix == null || matrix.Length == 0)return result;int start = 0;int end1 = matrix[start].Length - 1 - start;int end2 = matrix.Length - 1 - start;// 只有横着的情况if (start == end2){LeftToRight(start, end1, start, matrix, result);return result;}//只有竖着的情况if (start == end1){TopToBottom(start, end2, start, matrix, result);return result;}while (start < end1 && start < end2){LeftToRight(start, end1, start, matrix, result);TopToBottom(start + 1, end2, end1, matrix, result);RightToLeft(end1 - 1, start, end2, matrix, result);BottomToTop(end2 - 1, start + 1, start, matrix, result);start++;end1 = matrix[start].Length - 1 - start;end2 = matrix.Length - 1 - start;}// 只剩下横着的情况if (start == end2){LeftToRight(start, end1, start, matrix, result);}else if (start == end1){//只剩下竖着的情况TopToBottom(start, end2, start, matrix, result);}return result;}private void LeftToRight(int start, int end, int rowIndex, int[][] matrix, IList<int> lst){for (int i = start; i <= end; i++){lst.Add(matrix[rowIndex][i]);}}private void TopToBottom(int start, int end, int colIndex, int[][] matrix, IList<int> lst){for (int i = start; i <= end; i++){lst.Add(matrix[i][colIndex]);}}private void RightToLeft(int start, int end, int rowIndex, int[][] matrix, IList<int> lst){for (int i = start; i >= end; i--){lst.Add(matrix[rowIndex][i]);}}private void BottomToTop(int start, int end, int colIndex, int[][] matrix, IList<int> lst){for (int i = start; i >= end; i--){lst.Add(matrix[i][colIndex]);}}
}

实验结果

  • 状态:通过
  • 22 / 22 个通过测试用例
  • 执行用时: 348 ms, 在所有 C# 提交中击败了 85.53% 的用户
  • 内存消耗: 28.9 MB, 在所有 C# 提交中击败了 5.26% 的用户


相关图文

1. “数组”类算法

  • LeetCode实战:三数之和
  • LeetCode实战:最接近的三数之和
  • LeetCode实战:求众数
  • LeetCode实战:缺失的第一个正数
  • LeetCode实战:快乐数
  • LeetCode实战:寻找两个有序数组的中位数
  • LeetCode实战:盛最多水的容器
  • LeetCode实战:删除排序数组中的重复项
  • LeetCode实战:搜索旋转排序数组

2. “链表”类算法

  • LeetCode实战:两数相加
  • LeetCode实战:删除链表的倒数第N个节点
  • LeetCode实战:合并两个有序链表
  • LeetCode实战:合并K个排序链表
  • LeetCode实战:两两交换链表中的节点
  • LeetCode实战:旋转链表
  • LeetCode实战:环形链表

3. “栈”类算法

  • LeetCode实战:有效的括号
  • LeetCode实战:最长有效括号
  • LeetCode实战:逆波兰表达式求值

4. “队列”类算法

  • LeetCode实战:设计循环双端队列
  • LeetCode实战:滑动窗口最大值
  • LeetCode实战:整数反转
  • LeetCode实战:字符串转换整数 (atoi)

5. “递归”类算法

  • LeetCode实战:爬楼梯

6. “字符串”类算法

  • LeetCode实战:反转字符串
  • LeetCode实战:翻转字符串里的单词
  • LeetCode实战:最长公共前缀
  • LeetCode实战:字符串相加
  • LeetCode实战:字符串相乘

7. “树”类算法

  • LeetCode实战:相同的树
  • LeetCode实战:对称二叉树
  • LeetCode实战:二叉树的最大深度
  • LeetCode实战:将有序数组转换为二叉搜索树

8. “哈希”类算法

  • LeetCode实战:两数之和

9. “搜索”类算法

  • LeetCode实战:搜索二维矩阵

10. “动态规划”类算法

  • LeetCode实战:最长回文子串
  • LeetCode实战:最大子序和

11. “回溯”类算法

  • LeetCode实战:全排列

11. “数值分析”类算法

  • LeetCode实战:回文数
  • LeetCode实战:x 的平方根

LeetCode实战:螺旋矩阵相关推荐

  1. LeetCode 885. 螺旋矩阵 III

    1. 题目 在 R 行 C 列的矩阵上,我们从 (r0, c0) 面朝东面开始 这里,网格的西北角位于第一行第一列,网格的东南角位于最后一行最后一列. 现在,我们以顺时针按螺旋状行走,访问此网格中的每 ...

  2. LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

    文章目录 1. 题目信息 2. LeetCode 59 解题 3. LeetCode 54. 螺旋矩阵 4.<剑指Offer>面试题29 1. 题目信息 给定一个正整数 n,生成一个包含 ...

  3. LeetCode:螺旋矩阵【54】

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

  4. 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、​LeetCode 209.长度最小的子数组、LeetCode 59.螺旋矩阵II

    LeetCode 977.有序数组的平方 双指针法:数组其实是有序的, 只不过负数平方之后可能成为最大数了.那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间.此时可以考虑双指针法 ...

  5. 螺旋矩阵c++语言_一起刷 leetcode 之螺旋矩阵(头条和美团真题)

    微信公众号:每天晒白牙 关注可了解更多编程知识.问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎关注与转发 题目描述 给定一个包含 m*n 个元素的矩阵(m 行,n 列),请按顺时针螺旋顺序, ...

  6. LeetCode 54.螺旋矩阵 - 原地修改

    [LetMeFly]54.螺旋矩阵 - 原地修改 力扣题目链接:https://leetcode.cn/problems/spiral-matrix/ 给你一个 m行 n列的矩阵 matrix,请按照 ...

  7. LeetCode 59. 螺旋矩阵 II

    和54.螺旋矩阵 类似 public static int[][] generateMatrix(int n) {int[][] a = new int[n][n];if(n<1)return ...

  8. Java实现 LeetCode 54 螺旋矩阵

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

  9. 力扣(LeetCode)54. 螺旋矩阵(C++)

    思路分析 螺旋矩阵,又称蛇形矩阵,这是说,遍历它就像蛇一样一环一环的向内滑动. 遍历时变向,我们需要一个技巧.开方向数组, d x , d y dx,dy dx,dy,分别代表 x x x 的移动方向 ...

  10. leetcode 54. 螺旋矩阵

    难度:中等 频次:114 题目:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 解题思路:按要求模拟遍历(重点在构造xy的坐标上) 注意: 需要定义四 ...

最新文章

  1. 从Nginx绑定80端口学套接字编程
  2. mysql画事实表_sql生成事实表数据库
  3. 是什么管脚分配_FPGA是什么?里面有什么?能做什么?
  4. 原来,爱情是与旁观者有关的。。。
  5. DMN结合bpmn简化流程_07
  6. AI前沿 | Gartner曲线5大趋势:传感和移动、超能人类、自动机器人、高级人工智能…...
  7. glassfish 自定义 jaas realm
  8. OA系统如何助力企业行政管理?
  9. leetcode 没有php,Leetcode PHP题解--D99 860. Lemonade Change
  10. linux网卡配置没生效,linux上网络配置不生效的解决办法
  11. JavaScript键盘按键侦测
  12. python读取歌词文本,并显示在图片上,制作视频
  13. 美满电子-88E1111PHY
  14. 基于实践的LabVIEW零基础入门视频教程
  15. 敲代码时如何快速移动光标_如何用 罗技蓝牙键盘 K380在手机上打字编辑发布头条文章...
  16. 灰度图腐蚀膨胀原理介绍的很清晰。
  17. Stata:市场调整模型(MA)计算的并购事件的累积超额回报(CAR)
  18. 项目03--当当网源码解读
  19. Python基础教程读书笔记(第5章—第6章:条件、循环和其他语句;抽象)
  20. [编程题]java实现游历魔法王国

热门文章

  1. android 背景切换动画效果代码,关于Android shape gradient背景渐变
  2. 修改maven本地仓库的位置及疑惑
  3. 如何处理用代码创建SD Sales order时遇到的错误消息KI 180
  4. 使用reflector对.NET反编译
  5. Windows程序设计------字体不等宽引出的问题及其细节知识
  6. NginxApachePHP参数汇总
  7. 快节奏的多人游戏同步 - 示例代码和在线演示
  8. Android5.1.1源码 - zygote fork出的子进程如何权限降级
  9. Qunee for HTML5 V2.5新版本发布
  10. 2012年我的十大工程9——形象工程