螺旋遍历问题的解题套路

螺旋遍历问题的解题套路,第1张

螺旋遍历问题的解题套路 螺旋遍历问题的解题套路

螺旋遍历是数组相关问题中一种比较常见的题目,这种题不涉及算法,主要考察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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5714305.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存