
螺旋遍历是数组相关问题中一种比较常见的题目,这种题不涉及算法,主要考察coder对代码的掌握能力,对问题的模拟能力。
一、解题思路如图,我们在进行螺旋遍历的时候,会有且仅有四条路线,这四条路线按顺序遍历:
- 从左到右从上到下从右到左从下到上
好的,那么已经知道路线了,那就来看看在每条路上要走多远,即控制边界。在这里我们规定遍历路径时遵循左闭右闭原则。然后在每次遍历完一条边时判断一下再去遍历下一条边会不会越界。
二、举个例子leetcode第54题——螺旋矩阵
题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
题解
class Solution {
public:
vector spiralOrder(vector>& matrix) {
vector res;
int rows = matrix.size(), cols = matrix[0].size();
//设置四条边界用来控制循环以及判断是否会越界
int up = 0, down = rows -1, left = 0, right = cols - 1;
while(true) {
for(int j = left; j <= right; j++) res.push_back(matrix[up][j]);
if(++up > down) break;
for(int i = up; i <= down; i++) res.push_back(matrix[i][right]);
if(--right < left) break;
for(int j = right; j >= left; j--) res.push_back(matrix[down][j]);
if(--down < up) break;
for(int i = down; i >= up; i--) res.push_back(matrix[i][left]);
if(++left > right) break;
}
return res;
}
};
如果你实在无法理解,那么可以直接记住以上这段代码,把他当做模板去套在其他类似的问题上。
最后再给出一道类似的题目留给读者去实践。
leetcode第59题——螺旋矩阵II
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)