LeetCode刷题系列 -- 54. 螺旋矩阵

这篇具有很好参考价值的文章主要介绍了LeetCode刷题系列 -- 54. 螺旋矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

LeetCode刷题系列 -- 54. 螺旋矩阵

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

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

示例 2:

LeetCode刷题系列 -- 54. 螺旋矩阵

输入: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]

提示:

  • m == matrix.length

  • n == matrix[i].length

  • 1 <= m, n <= 10

  • -100 <= matrix[i][j] <= 100

54. 螺旋矩阵 - 力扣(Leetcode)

思路:二维数组的花式遍历技巧 :: labuladong的算法小抄

定义四个变量: upper_bound、lower_bound、left_bound 与 right_bound
upper_bound 表示要遍历的最上边一行;
right_bound 表示要遍历的最右边一行;
lower_bound 表示要遍历最下边一行;
left_bound 表示要遍历的最左边一行。
按照上面说的顺序来遍历矩阵,并将元素 copy到结果数组中

c++文章来源地址https://www.toymoban.com/news/detail-400412.html

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        int upper_bound = 0, lower_bound=m-1;
        int left_bound = 0, right_bound = n-1;
        vector<int>  result;

        while(result.size() < m*n) {
            //cout<< upper_bound<< ","<<lower_bound <<"," << left_bound <<","<<right_bound<<endl;
            // 最顶上一行,从左到右遍历
            if(upper_bound <= lower_bound) { // 保证不溢出数组且
                for(int i=left_bound; i<=right_bound; i++) {
                    result.push_back(matrix[upper_bound][i]);
                }
                upper_bound++; // 最上边一行下移一个
            }

            // 最右边一列,从上到小遍历
            if(left_bound <= right_bound) {
                for(int i=upper_bound; i<=lower_bound; i++) {
                    result.push_back(matrix[i][right_bound]);
                }
                right_bound--; // 最右边一列左移一个
            }


            // 最下边一行,从右到左遍历
            if(upper_bound <= lower_bound) {
                for(int i=right_bound; i>=left_bound; i--) {
                    result.push_back(matrix[lower_bound][i]);
                }
                lower_bound--;
            }

            // 最左边一列,从下到上遍历
            if(left_bound <= right_bound) {
                 for(int i=lower_bound; i>=upper_bound; i--) {
                    result.push_back(matrix[i][left_bound]);
                }
                left_bound++;
            }

        }


        return result;
    }
};

到了这里,关于LeetCode刷题系列 -- 54. 螺旋矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

    54. 螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/ 题目要求:  思路:一定要 先找好边界 。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可以确定四个边界所包含的值。然后再 循环一层一层往里进入 ,比如添加完上边界1234后,上边界就需要+1,

    2024年02月12日
    浏览(51)
  • 54. 螺旋矩阵

    给你一个  m  行  n  列的矩阵  matrix  ,请按照  顺时针螺旋顺序  ,返回矩阵中的所有元素。 示例 1: 示例 2: 提示: m == matrix.length n == matrix[i].length 1 = m, n = 10 -100 = matrix[i][j] = 100 方法1:(0ms) 方法2:(0ms)

    2024年01月24日
    浏览(35)
  • 力扣题解(54. 螺旋矩阵),带注释

    链接:点我

    2024年02月09日
    浏览(37)
  • 看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题59螺旋矩阵II) 2023.4.20

    本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!! 力扣题目链接 分析题目: 元素按照 顺时

    2024年02月05日
    浏览(41)
  • Grind75第13天 | 208.实现Trie、54.螺旋矩阵、721.账户合并

    题目链接:https://leetcode.com/problems/implement-trie-prefix-tree 解法: 这个题非常经典,背下来。 首先需要自己实现Node的类,属性为children和是否为单词的标记,再去初始化Trie的类。 在插入和查询的过程中,都要不断让指针指向children。 参考题解:实现Trie 边界条件:无 题目链接:

    2024年01月20日
    浏览(43)
  • 算法刷题-数组-螺旋矩阵

    力扣题目链接 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 这道题目可以说在面试中出现频率较高的题目, 本题并不涉及到什么算法,就是模拟过程,但却十分考察对代

    2024年02月08日
    浏览(54)
  • 刷题(双指针思想/滑动窗口思想/l螺旋矩阵)

    刚开始自己做就是无脑ac的,sort: 但是时间复杂度有问题, 是O(nlogn)的时间复杂度 提升:用双指针的思想:时间复杂度为O(n) 使用 双指针 的思想解决本题的思路: 以数组 为例: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 因为输入的数组是递增的,因此,平方后的最大值,只

    2023年04月08日
    浏览(52)
  • 【LeetCode热题100】【矩阵】螺旋矩阵

    题目链接:54. 螺旋矩阵 - 力扣(LeetCode) 先走外面的圈再走里面的圈,可以用递归来解决,对于要走的一个圈,由四个角决定,其实是三个数,(0,0),(0,n),(m,0),(m,n),每次先从左上角走到右上角,再走到右下角,再走到左下角,再走回来 对于后面两个的往

    2024年04月16日
    浏览(40)
  • 【leetcode100-019】【矩阵】螺旋矩阵

    【题干】 给你一个  m  行  n  列的矩阵  matrix  ,请按照  顺时针螺旋顺序  ,返回矩阵中的所有元素。 【思路】 不难注意到,每进行一次转向,都有一行/列被输出(并失效); 既然已经失效,那我们不妨就将这一行/列删去,当然并不是真的删去,其实只要让其无法再

    2024年02月02日
    浏览(33)
  • 螺旋矩阵 LeetCode热题100

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 模拟,朝一个方向走,走过的点标记一下,直到碰到边界或碰到已经走过的路,换个方向。右-下,下-左,左-上,上-右。直到走完所有点。

    2024年02月14日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包