leetcode 54. Spiral Matrix
来源:互联网 发布:修改apache配置文件 编辑:程序博客网 时间:2024/06/11 10:04
这题要求很简单,就是将给定的矩阵按螺旋形返回,我在大一的时候做过这道题,如今在leetcode看到,也是种缘分吧。
通过作图我们可以发现,对于每个行数为m,列数为n的矩阵,螺旋的圈数不会超过m和n中的较小值。通过分析遍历的顺序和对应的圈数,我们可以得到一些对应关系,这将帮助我们确定遍历的顺序(通过标志每次拐角的位置也可以达到同样的效果)。特别需要注意的是,当我们在某个方向(螺旋的方向分为右,下,左,上)不能访问任意一点的时候,说明我们已经遍历完成了。这个时候不管圈数是多少,直接退出循环即可。
代码如下:
class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> result; if (matrix.empty()) return result; int m = matrix.size(); // 行数 int n = matrix[0].size(); // 列数 int count = 0; // 记录已完成的圈数 int leftNum = m * n; int min = m < n ? m : n; while (count < min) { // 向右 for (int i = count; i < n - count; i++) { result.push_back(matrix[count][i]); } // 一旦没有点加进result,说明遍历已经完成,每螺旋一条边都要检查一次 if (count >= n - count) break; // 向下 for (int i = count + 1; i < m - count; i++) { result.push_back(matrix[i][n - count - 1]); } if (count + 1 >= m - count) break; // 向右 for (int i = n - count - 2; i >= count; i--) { result.push_back(matrix[m - count - 1][i]); } if (n - count - 2 < count) break; // 向上 for (int i = m - count - 2; i > count; i--) { result.push_back(matrix[i][count]); leftNum--; } if (m - count - 2 <= count) break; count++; } return result; }};
阅读全文
0 0
- LeetCode 54. Spiral Matrix
- [LeetCode]54.Spiral Matrix
- LeetCode --- 54. Spiral Matrix
- [Leetcode] 54. Spiral Matrix
- [leetcode] 54.Spiral Matrix
- Leetcode-54.Spiral Matrix
- **LeetCode 54. Spiral Matrix
- Leetcode 54. Spiral Matrix
- [leetcode] 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- 54. Spiral Matrix LeetCode
- leetcode 54. Spiral Matrix
- LeetCode *** 54. Spiral Matrix
- [LeetCode]54. Spiral Matrix
- LeetCode 54. Spiral Matrix
- LeetCode--54. Spiral Matrix
- LeetCode - 54. Spiral Matrix
- [Leetcode]54. Spiral Matrix
- 【Deep Learning】YOLO_v1:You Only Look Once 原理
- 顺序表应用8:最大子段和之动态规划法
- 图像的逻辑变换
- 大数据处理中基于概率的数据结构
- 镜像
- leetcode 54. Spiral Matrix
- 指向结构体的指针数组,应用
- [NOI2010]:能量采集
- java -- 接口
- windows&mongodb
- 16讲 序列!序列!
- 幂方的最后一位
- C++中的默认函数与default和delete用法
- 数据结构实验之链表七:单链表中重复元素的删除